Como usar o TLS no portal

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

É possível configurar o portal para usar o TLS. O procedimento de configuração do TLS para o portal depende de como você o implantou:

  • Nuvem: configure o TLS no Pantheon ou no Acquia, os serviços de hospedagem baseados na nuvem para o portal.
  • Apigee Edge para nuvem privada: configure o TLS no local no servidor que hospeda o portal.

TLS e o portal

A imagem a seguir mostra os dois locais em que o portal usa o TLS:

  1. Para comunicação entre o portal e a API Management do Edge.

    O portal não funciona como um sistema independente. Em vez disso, muitas das informações usadas por o portal são realmente armazenadas no Edge, onde o Edge pode ser implantado na nuvem ou no local como uma instalação de nuvem privada. Quando necessário, o portal faz uma solicitação HTTP ou HTTPS para a API Management do Edge para recuperar ou enviar informações.

    Ao criar o portal, uma das primeiras etapas é especificar o URL da API Management do Edge. Dependendo de como a API Management do Edge está configurada, esse URL pode usar o TLS. Consulte Como criar um portal do desenvolvedor para mais informações.
  2. Para comunicação entre desenvolvedores e o portal.

    Ao usar o portal de serviços do desenvolvedor para implantar suas APIs, os desenvolvedores fazem login no portal para registrar apps e receber chaves de API. As credenciais de login e a chave de API são informações proprietárias que você quer enviar por HTTPS para garantir a segurança delas. Esse tipo de informação reservada precisa ser enviado por HTTPS.

    A maneira como você configura o TLS para esse cenário depende de como você implantou o portal: nuvem ou Apigee Edge para nuvem privada. As seções a seguir descrevem os dois cenários.

Como configurar o TLS entre o portal e a API Management do Edge

A configuração da API Management do Edge determina se a comunicação pode ou não usar TLS. Se a API Management do Edge estiver configurada para usar o TLS, o portal poderá usar o HTTPS. Caso contrário, o portal se comunica com o Edge por HTTP. Portanto, como desenvolvedor de portal, você só precisa saber como o Edge está configurado para definir a conexão entre o portal e o Edge.

Para o procedimento usado para configurar a conexão com a API Management do Edge, consulte Como criar um portal do desenvolvedor.

Versão do Edge baseada na nuvem

Se o portal se conectar à versão do Edge baseada na nuvem, o URL da API Management do Edge será pré-configurado pela Apigee para usar o TLS. Ao configurar o portal, acesse a API Management do Edge usando o URL https://api.enterprise.apigee.com/v1.

Instalação do Edge na nuvem privada

Para uma instalação do Edge na nuvem privada, o URL da API Management do Edge está no formato:
http://EdgePrivateCloudIp:8080/v1
ou:
https://EdgePrivateCloudIp:TLSport/v1

em que EdgePrivateCloudIp é o endereço IP do servidor do Edge Management Server e TLSport é a porta TLS da API Management do Edge. Por exemplo, o número da porta pode ser 8443 ou até mesmo 8080 com base na configuração do Edge.

Como configurar o TLS entre desenvolvedores e o portal

A maneira como você configura o TLS entre desenvolvedores e o portal depende de como você implantou o portal: nuvem ou Apigee Edge para nuvem privada.

Portais baseados na nuvem

Pantheon

O Pantheon oferece HTTPS automatizado sem custo financeiro para todos os sites na plataforma usando a CDN global do Pantheon e o Let's Encrypt. Consulte também HTTPS na CDN global do Pantheon.

Acquia

Para ativar o TLS/SSL usando o Acquia, consulte Como ativar o SSL.

Portais do Edge para nuvem privada

Todas as instalações de nuvem privada recomendadas pela Apigee do portal exigem que ele esteja atrás de um balanceador de carga, conforme mostrado abaixo:

Portanto, para instalações locais, você tem duas opções para configurar o TLS:

  • Configurar o TLS no balanceador de carga: configure o TLS no próprio balanceador de carga e não no portal. Portanto, o procedimento usado para configurar o TLS é, portanto, dependente do balanceador de carga. Consulte a documentação do balanceador de carga para mais informações.
  • Configurar o TLS no próprio portal: se necessário, configure o TLS no servidor da Web que hospeda o portal. Consulte Como configurar o portal para usar HTTPS para mais informações.

É necessário receber seu próprio certificado TLS antes de implantar o portal em um ambiente de produção.

Como configurar outras definições de TLS

É possível editar o arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) para fazer mudanças de configuração no TLS do portal.

Ao editar o arquivo, adicione instâncias da função ini_set() para definir uma propriedade. Para mais informações sobre essa função, consulte: http://php.net/manual/en/function.ini-set.php.

É possível definir as seguintes propriedades no arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada):

  • cookie_httponly: (recomendado) especifica que o cookie só pode ser acessado pelo protocolo HTTP. Defina essa propriedade como:

    ini_set('session.cookie_httponly', true);
  • session.cookie_secure : (opcional) especifica que os cookies só podem ser enviados por conexões seguras. No entanto, isso significa que todo o conteúdo precisa ser veiculado por HTTPS. Se essa configuração estiver ativada, o site não vai funcionar por HTTP. Defina essa propriedade como:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime e cookie_lifetime: (opcional) gc_lifeteime especifica o número de segundos após o qual os dados podem ser limpos, e cookie_lifetime especifica a vida útil do cookie em segundos. Defina essas propriedades como:

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

Para mais informações sobre como configurar o TLS entre o portal do desenvolvedor e os clientes, consulte Ativar o SSL para comunicação HTTPS segura no site de documentos do Pantheon.

Como configurar o TLS com balanceadores de carga

Para melhor desempenho, os balanceadores de carga às vezes são configurados para realizar o término de TLS. Com o término de TLS, os balanceadores de carga descriptografam mensagens enviadas por https:// e encaminham as mensagens para servidores de back-end por http://. Isso economiza a sobrecarga dos servidores de back-end de descriptografar mensagens https://.

Se os balanceadores de carga encaminharem mensagens http não criptografadas para servidores no mesmo data center, a segurança não será um problema. No entanto, se os balanceadores de carga encaminharem mensagens por http:// para servidores fora do data center, como o portal do desenvolvedor da Apigee, as mensagens não serão criptografadas, o que abre uma brecha de segurança.

Se o portal do desenvolvedor estiver atrás de balanceadores de carga que usam o término de TLS e você quiser que todo o tráfego seja veiculado por https://, as páginas do site precisarão conter apenas links https:// e você precisará adicionar o código a seguir aos arquivos sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) do portal do desenvolvedor. Como o balanceador de carga não transforma automaticamente o conteúdo das páginas HTML, o código garante que todos os links transmitidos ao cliente comecem com https://.

Para configurar o TLS com balanceadores de carga, adicione as seguintes linhas ao arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem 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 mais informações, consulte:

Como redirecionar o tráfego do portal para HTTPS

É possível redirecionar todo o tráfego do portal para HTTPS atualizando o arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada). As atualizações necessárias variam dependendo se você está redirecionando para HTTPS no mesmo nome de host ou em vários nomes de host.

Como redirecionar para HTTPS no mesmo nome de host

Adicione o código a seguir ao arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) para redirecionar todo o tráfego do portal para HTTPS no mesmo nome de host (por exemplo, *.devportal.apigee.io).

Nesse cenário, se um desenvolvedor estiver acessando o portal em live-example.devportal.apigee.io, mas precisar acessar um certificado que foi enviado para devportal.example.com, a solicitação vai falhar.

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

Como redirecionar para HTTPS em vários nomes de host

Adicione o código a seguir ao arquivo sites/default/settings.local.php (nuvem) ou ao arquivo sites/default/settings.php (nuvem privada) para redirecionar todo o tráfego do portal para HTTPS em vários nomes 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;
  }
}