Como usar o TLS no portal

Você está vendo a documentação do Apigee Edge.
Consulte a documentação do Apigee X.

É possível configurar o portal para usar TLS. O procedimento de configuração do TLS para o portal depende de como ele foi implantado:

  • Cloud: configure o TLS do Pantheon ou do Acquia, os serviços de hospedagem baseados em nuvem para o portal.
  • Apigee Edge for Private Cloud: configure o TLS no local no servidor que hospeda o portal.

TLS e o portal

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

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

    O portal não funciona como um sistema independente. Na verdade, grande parte das informações usadas pelo portal é armazenada no Edge, onde ele 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 à API Edge Management para recuperar ou enviar informações.

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

    Quando você usa o portal do Developer Services 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 reservadas que você quer enviar por HTTPS para garantir a segurança. Esse tipo de informação reservada precisa ser enviado por HTTPS.

    A configuração do 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 Edge Management

A configuração da API Edge Management determina se a comunicação pode ou não usar o TLS. Se a API de gerenciamento de borda estiver configurada para usar TLS, o portal poderá usar HTTPS. Caso contrário, o portal se comunica com o Edge sobre 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 Edge Management, 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 de gerenciamento do Edge será pré-configurado pela Apigee para usar o TLS. Ao configurar o portal, você acessa a API de gerenciamento do Edge usando o URL https://api.enterprise.apigee.com/v1.

Instalação de nuvem privada do Edge

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

em que EdgePrivateCloudIp é o endereço IP do servidor do servidor de gerenciamento de borda e TLSport é a porta TLS para a API de gerenciamento de borda. 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 os desenvolvedores e o portal

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

Portais baseados na nuvem

Panteão

O Pantheon oferece HTTPS automatizado e sem custo financeiro para todos os sites na plataforma por meio da Pantheon Global CDN e usando o Let's Encrypt (em inglês). Consulte também HTTPS na CDN global do Pantheon.

Acquia

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

Edge para portais da nuvem privada

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

Portanto, para instalações no local, há duas opções para configurar o TLS:

  • Configure o TLS no balanceador de carga: configure o TLS no próprio balanceador de carga, não no portal. Portanto, o procedimento usado para configurar o TLS depende do balanceador de carga. Consulte a documentação do balanceador de carga para mais informações.
  • Configure 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.

Você precisa conseguir seu próprio certificado TLS antes de implantar o portal em um ambiente de produção.

Como definir outras configurações do TLS

É possível editar o arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) para fazer alterações 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 o cookie como acessível somente por meio do protocolo HTTP. Defina esta 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 funcionará por HTTP. Defina esta propriedade como:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime e cookie_lifetime: (opcional) gc_lifeteime especifica em segundos o período em que 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 SSL para comunicação HTTPS segura no site do documento do Pantheon.

Como configurar o TLS com balanceadores de carga

Para melhor desempenho, os balanceadores de carga às vezes são configurados para executar o encerramento de TLS. Com o encerramento de TLS, os balanceadores de carga descriptografam mensagens enviadas por https:// e as encaminham para servidores de back-end por http://. Isso poupa aos servidores de back-end a sobrecarga da descriptografia de 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 lacuna de segurança.

Se o portal do desenvolvedor estiver atrás de balanceadores de carga que usam terminação 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 será necessário adicionar o seguinte código ao seu portal do desenvolvedor sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada). Como o balanceador de carga não transforma automaticamente o conteúdo das páginas HTML, o código garante que todos os links passados para o 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;
  }
}

Veja mais informações nos links abaixo:

Como redirecionar o tráfego do portal para HTTPS

Para redirecionar todo o tráfego do portal para HTTPS, atualize o arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada). As atualizações necessárias variam se você estiver redirecionando para HTTPS no mesmo nome de host ou em vários.

Como redirecionar para HTTPS no mesmo nome de host

Adicione o seguinte código ao seu arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) para redirecionar a 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 seu portal em live-example.devportal.apigee.io, mas precisar acessar um certificado que foi carregado para devportal.example.com, a solicitação 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 seguinte código ao seu arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) para redirecionar a 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;
  }
}