Usa TLS en el portal

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

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

  • Cloud: Configura TLS desde Pantheon o Acquia, los servicios de hosting basados en la nube para el portal.
  • Apigee Edge para nube privada: Configura TLS 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 Edge Management.

    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 envía una solicitud HTTP o HTTPS a la API de Edge Management para recuperar información o enviarla.

    Cuando creas el portal, uno de los primeros pasos que debes realizar es especificar la URL de la API de Edge Management. Según cómo esté configurada la API de Edge Management, esa URL puede usar TLS. Para obtener más información, consulta Cómo crear un portal para desarrolladores.
  2. Para la comunicación entre los desarrolladores y el portal.

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

    La forma en que configures TLS para esta situación depende de cómo hayas implementado el portal: cloud o Apigee Edge para la nube privada. En las siguientes secciones, se describen ambas situaciones.

Configura TLS entre el portal y la API de Edge Management

La configuración de la API de Edge Management determina si la comunicación puede usar TLS o no. Si la API de Edge Management 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 Edge está configurado para establecer la conexión entre el portal y Edge.

Si deseas ver el procedimiento que usas para configurar la conexión a la API de Edge Management, consulta Crea un portal para desarrolladores.

Versión de Edge basada en la nube

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

Instalación de Edge en la nube privada

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

En el ejemplo anterior, EdgePrivateCloudIp es la dirección IP del servidor del servidor de Edge Management y TLSport es el puerto TLS para la API de Edge Management. 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 de configurar TLS entre los desarrolladores y el portal depende de cómo implementaste el portal: Cloud o Apigee Edge para la nube privada.

Portales basados en la nube

Pantheon

Pantheon proporciona HTTPS automatizado 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.

Edge para portales de nube privada

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

Por lo tanto, en el caso de 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 depende del balanceador de cargas. Consulta la documentación sobre el 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 que use HTTPS si deseas obtener más información.

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

Establece parámetros de configuración TLS adicionales

Puedes editar el archivo sites/default/settings.local.php (cloud) 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 configurar una propiedad. Para obtener más información sobre esta función, consulta: http://php.net/manual/en/function.ini-set.php.

Puedes configurar 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 sea accesible solo a través del protocolo HTTP. Establece esta propiedad de la siguiente manera:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure: (opcional) especifica que las cookies solo se pueden enviar mediante conexiones seguras. Sin embargo, esto significa que todo el contenido debe entregarse mediante HTTPS. Si se habilita esta configuración, el sitio no funcionará en HTTP. Establece esta propiedad de la siguiente manera:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime y cookie_lifetime: gc_lifeteime especifica la cantidad de segundos después de los cuales los datos pueden limpiarse potencialmente, y cookie_lifetime especifica la duración de la cookie en segundos (opcional). Establece estas propiedades de la siguiente manera:

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

Si quieres obtener más información para configurar TLS entre el portal para desarrolladores y los clientes, consulta Habilita SSL para la comunicación HTTPS segura en el sitio de documentos de Pantheon.

Configura TLS con balanceadores de cargas

Con el fin de obtener un mejor rendimiento, los balanceadores de cargas a veces están configurados 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 reenvían los mensajes a los servidores de backend a través de http://. Eso ahorra a los servidores de backend la sobrecarga de desencriptar mensajes https:// por su cuenta.

Si los balanceadores de cargas reenvían mensajes HTTP sin encriptar a servidores en el mismo centro de datos, la seguridad no es un problema. Sin embargo, si los balanceadores de cargas reenvían mensajes mediante 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 terminació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:

Redirecciona el tráfico del portal a HTTPS

Para redireccionar todo el tráfico del portal a HTTPS, actualiza el archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada). Las actualizaciones requeridas varían en función de 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 archivo sites/default/settings.local.php (cloud) o sites/default/settings.php (nube privada) para redireccionar a todo el tráfico del portal a HTTPS en el mismo nombre de host (por ejemplo, *.devportal.apigee.io).

En esta situación, 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;
  }
}

Redireccionamiento a HTTPS en varios nombres de host

Agrega el siguiente código a tu archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada) para redireccionar a 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;
  }
}