Usa TLS en el portal

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Puedes configurar el portal para usar TLS. El procedimiento de configuración de TLS para el portal depende de cómo lo hayas implementado:

  • Nube: Configura TLS desde Pantheon o Acquia, los servicios de hosting basados en la nube para el portal.
  • Apigee Edge para nube privada: Configura TLS de forma local en el servidor que aloja el portal.

TLS y el portal

En la siguiente imagen, se muestran los dos lugares en los que el portal usa TLS:

  1. Para la comunicación entre el portal y la API de administración de Edge

    El portal no funciona como un sistema independiente. En cambio, gran parte de la información que usa el portal se almacena en Edge, donde Edge se puede implementar en la nube o de forma local como una instalación de nube privada. Cuando es necesario, el portal realiza una solicitud HTTP o HTTPS a la API de administración de Edge para recuperar o enviar información.

    Cuando creas tu portal, uno de los primeros pasos que debes realizar es especificar la URL de la API de administración de Edge. Según cómo se configure la API de administración de Edge, esa URL puede usar TLS. Consulta Crear un portal para desarrolladores para obtener más información.
  2. Para la comunicación entre los desarrolladores y el portal

    Cuando usas el portal de servicios para desarrolladores para implementar tus APIs, tus desarrolladores acceden al portal para registrar apps y recibir claves de API. Las credenciales de acceso y la clave de API son información patentada que deseas enviar a través de HTTPS para garantizar su seguridad. Este tipo de información patentada se debe enviar a través de HTTPS.

    La forma en que configuras TLS para este caso depende de cómo hayas implementado el portal: nube o Apigee Edge para nube privada. En las siguientes secciones, se describen ambos casos.

Configura TLS entre el portal y la API de administración de Edge

La configuración de la API de administración de Edge determina si la comunicación puede usar TLS o no. Si la API de administración de Edge está configurada para usar TLS, el portal puede usar HTTPS. De lo contrario, el portal se comunica con Edge a través de HTTP. Por lo tanto, como desarrollador de portales, solo necesitas saber cómo está configurado Edge para establecer la conexión entre el portal y Edge.

Para obtener el procedimiento que usas para configurar la conexión a la API de administración de Edge, consulta Crea un portal para desarrolladores.

Versión de Edge basada en la nube

Si tu portal se conecta a la versión de Edge basada en la nube, Apigee preconfigura la URL de la API de administración de Edge para usar TLS. Cuando configuras el portal, accedes a la API de administración de Edge con la URL https://api.enterprise.apigee.com/v1.

Instalación de Edge de nube privada

Para una instalación de Edge de nube privada, la URL de la API de administración de Edge tiene el siguiente formato:
http://EdgePrivateCloudIp:8080/v1
o:
https://EdgePrivateCloudIp:TLSport/v1

donde EdgePrivateCloudIp es la dirección IP del servidor de Edge Management Server y TLSport es el puerto TLS para la API de administración de Edge. Por ejemplo, el número de puerto podría ser 8443 o incluso 8080 según la configuración de Edge.

Configura TLS entre los desarrolladores y el portal

La forma en que configuras TLS entre los desarrolladores y el portal depende de cómo hayas implementado el portal: nube o Apigee Edge para nube privada.

Portales basados en la nube

Pantheon

Pantheon proporciona HTTPS automatizado y gratuito para todos los sitios de su plataforma a través de la CDN global de Pantheon y con Let's Encrypt. Consulta también HTTPS en la CDN global de Pantheon.

Acquia

Para habilitar TLS/SSL con Acquia, consulta Habilita SSL.

Portales de Edge para nube privada

Todas las instalaciones de nube privada recomendadas por Apigee del portal requieren que el portal esté detrás de un balanceador de cargas, como se muestra a continuación:

Por lo tanto, para las instalaciones locales, tienes dos opciones para configurar TLS:

  • Configura TLS en el balanceador de cargas: Configura TLS en el balanceador de cargas y no en el portal. Por lo tanto, el procedimiento que usas para configurar TLS es, por lo tanto, dependiente del balanceador de cargas. Consulta la documentación de tu balanceador de cargas para obtener más información.
  • Configura TLS en el portal: Si es necesario, puedes configurar TLS en el servidor web que aloja el portal. Consulta Configura el portal para usar HTTPS para obtener más información.

Debes obtener tu propio certificado TLS antes de poder implementar el portal en un entorno de producción

Configura parámetros adicionales de TLS

Puedes editar el archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada) para realizar cambios de configuración en TLS para el portal.

Cuando edites el archivo, agrega instancias de la función ini_set() para establecer una propiedad. Para obtener más información sobre esta función, consulta http://php.net/manual/en/function.ini-set.php.

Puedes establecer las siguientes propiedades en el archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada):

  • cookie_httponly: (Recomendado) Especifica que la cookie solo es accesible a través del protocolo HTTP. Establece esta propiedad como:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure : (Opcional) Especifica que las cookies solo se pueden enviar a través de conexiones seguras. Sin embargo, esto significa que todo el contenido se debe entregar a través de HTTPS. Si se habilita este parámetro, el sitio no funcionará a través de HTTP. Establece esta propiedad como:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime y cookie_lifetime: (Opcional) gc_lifeteime especifica la cantidad de segundos después de los cuales se pueden limpiar los datos, y cookie_lifetime especifica la vida útil de la cookie en segundos. Establece estas propiedades como:

    ini_set('session.gc_maxlifetime', 3600);
    ini_set('session.cookie_lifetime', 3600);

Para obtener más información sobre cómo configurar TLS entre el portal para desarrolladores y los clientes, consulta Habilita SSL para la comunicación segura de HTTPS en el sitio de documentación de Pantheon.

Configura TLS con balanceadores de cargas

Para obtener un mejor rendimiento, a veces, los balanceadores de cargas se configuran para realizar la finalización de TLS. Con la finalización de TLS, los balanceadores de cargas desencriptan los mensajes enviados a través de https:// y los reenvían a los servidores de backend a través de http://. Esto ahorra a los servidores de backend la sobrecarga de desencriptar los mensajes https://.

Si los balanceadores de cargas reenvían mensajes http sin encriptar a los servidores del mismo centro de datos, la seguridad no es un problema. Sin embargo, si los balanceadores de cargas reenvían mensajes a través de http:// a servidores fuera del centro de datos, como tu portal para desarrolladores de Apigee, los mensajes no están encriptados, lo que abre un agujero de seguridad.

Si tu portal para desarrolladores se encuentra detrás de balanceadores de cargas que usan la finalización de TLS y deseas que todo el tráfico se entregue a través de https://, las páginas del sitio web deberán contener solo vínculos https:// y deberás agregar el siguiente código a tu portal para desarrolladores sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada). Debido a que el balanceador de cargas no transforma automáticamente el contenido de las páginas HTML, el código garantiza que todos los vínculos que se pasan al cliente comiencen con https://.

Para configurar TLS con balanceadores de cargas, agrega las siguientes líneas al archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada):

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  // Set HTTPS URL of portal 
  $base_url = 'https://developers.myCo.com';

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    // You could optionally substitute a canonical server name for $_SERVER['HTTP_HOST'] here.
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

Para obtener más información, consulta lo siguiente:

Redirecciona el tráfico del portal a HTTPS

Puedes redireccionar todo el tráfico del portal a HTTPS si actualizas el archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada). Las actualizaciones requeridas varían según si redireccionas a HTTPS en el mismo nombre de host o en varios nombres de host.

Redirecciona a HTTPS en el mismo nombre de host

Agrega el siguiente código a tu sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada) para redireccionar todo el tráfico del portal a HTTPS en el mismo nombre de host (por ejemplo, *.devportal.apigee.io).

En este caso, si un desarrollador visita tu portal en live-example.devportal.apigee.io, pero necesita acceder a un certificado que se subió para devportal.example.com, la solicitud fallará.

// Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }

  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    exit;
  }
}

Redirecciona a HTTPS en varios nombres de host

Agrega el siguiente código a tu archivo sites/default/settings.local.php (nube) o archivo sites/default/settings.php (nube privada) para redireccionar todo el tráfico del portal a HTTPS en varios nombres de host.

  // Only check for SSL if we are not using PHP from the command line.
if (PHP_SAPI != 'cli') {
  // Assume we can't detect SSL unless proven otherwise.
  $can_detect_ssl = FALSE;
  // Assume we are not forcing a redirect until proven otherwise.
  $force_redirect = FALSE;

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) || (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) {
    $can_detect_ssl = TRUE;
  }

  if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') {
    $_SERVER['HTTPS'] = 'on';
  }
  
  if ($can_detect_ssl && $_SERVER['HTTPS'] != 'on') {
    // We will force a redirect because HTTPS is required.
    $force_redirect = TRUE;
  }
  
  // This works on Pantheon only; the constant is undefined elsewhere.
  switch (PANTHEON_ENVIRONMENT) {
    case 'dev':
      $canonical_hostname = 'dev.devportal.example.com';
      break;
    case 'test':
      $canonical_hostname = 'test.devportal.example.com';
      break;
    case 'live':
      $canonical_hostname = 'devportal.example.com';
      break;
    default:
      $canonical_hostname = strtolower($_SERVER['HTTP_HOST']);
      break;
  }
  if ($canonical_hostname != strtolower($_SERVER['HTTP_HOST'])) {
    // We will force a redirect because hostname is not canonical.
    $force_redirect = TRUE;
  }

  if ($force_redirect) {
    header('HTTP/1.0 301 Moved Permanently');
    header('Location: https://' . $canonical_hostname . $_SERVER['REQUEST_URI']);
    exit;
  }
}