Usa TLS en el portal

Estás viendo la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Más 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 realiza una solicitud HTTP o HTTPS a la API de Edge Management para recuperar información o enviarla.

    Cuando creas tu 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. Consulta Crea un portal para desarrolladores a fin de obtener más información.
  2. Para la comunicación entre los desarrolladores y el portal

    Cuando usas el portal de Developer Services para implementar tus APIs, los desarrolladores acceden al portal para registrar apps y recibir claves de API. Las credenciales de acceso y la clave de API son información confidencial que debes enviar a través de HTTPS para garantizar su seguridad. Este tipo de información de propiedad debe enviarse 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 for Private Cloud. 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 portal, solo necesitas saber cómo está configurado Edge para establecer la conexión entre el portal y Edge.

A fin de obtener información sobre 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 de Edge basada en la nube, Apigee preconfigura la URL de la API de Edge Management para usar TLS. Cuando configuras el portal, accedes a la API de Edge Management mediante la URL https://api.enterprise.apigee.com/v1.

Instalación de Edge en la nube privada

En una instalación de Edge en la 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

En el ejemplo anterior, EdgePrivateCloudIp es la dirección IP del servidor del servidor de administración de Edge 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 implementaste el portal: la nube o Apigee Edge para la nube privada.

Portales basados en la nube

Panteón

Pantheon proporciona HTTPS automatizado gratuito para todos los sitios de su plataforma a través de Pantheon Global CDN 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 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, 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 a fin de obtener más información.

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

Establece parámetros de configuración adicionales de TLS

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

Cuando edite el archivo, agregue 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 a través de conexiones seguras. Sin embargo, esto significa que todo el contenido debe entregarse mediante HTTPS. Si habilitas 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 se pueden limpiar los datos, y cookie_lifetime especifica la vida útil de la cookie en segundos (opcional). Configura 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 sobre la configuración de 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

A fin de obtener un mejor rendimiento, los balanceadores de cargas a veces 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 reenvían los mensajes a los servidores de backend por medio de http://. Esto 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 por 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 quieres 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 al portal para desarrolladores sites/default/settings.local.php (nube) o el archivo 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 pasados 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 tu archivo sites/default/settings.local.php (nube) o sites/default/settings.php (nube privada). Las actualizaciones requeridas varían en función de si se redirecciona a HTTPS en el mismo nombre de host o en varios.

Redirecciona a HTTPS en el mismo nombre 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 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;
  }
}

Redirecciona 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;
  }
}