Como usar o TLS no portal

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Você pode configurar o portal para usar o 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 na 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 abaixo mostra os dois lugares em que o portal usa TLS:

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

    O portal não funciona como um sistema independente. Na verdade, grande parte das informações usadas pelo portal é armazenada no Edge, onde 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 o portal, uma das primeiras etapas é especificar o URL da API de gerenciamento do Edge. Dependendo de como a API Edge Management estiver configurada, esse URL poderá usar o TLS. Saiba mais em Começar a criar seu portal do desenvolvedor.
  2. Para comunicação entre desenvolvedores e o portal.

    Quando você usa o portal de serviços para desenvolvedores 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 maneira de configurar o TLS para esse cenário depende de como você implantou o portal: nuvem ou Apigee Edge for Private Cloud. 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 dessa API determina se a comunicação pode ou não usar o TLS. Se a API Edge Management estiver configurada para usar TLS, o portal poderá usar HTTPS. Caso contrário, o portal se comunicará com o Edge via 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 conferir o procedimento usado para configurar a conexão com a API Edge Management, consulte Começar a criar seu portal do desenvolvedor.

Versão do Edge baseada na nuvem

Se o portal se conectar à versão baseada na nuvem do Edge, 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 Edge Management usando o URL https://api.enterprise.apigee.com/v1.

Instalação da nuvem privada do Edge

Para uma instalação de nuvem privada do Edge, o URL da API de gerenciamento do Edge tem o seguinte 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 da API de gerenciamento de Borda. Por exemplo, o número da porta pode ser 8443 ou até 8080, com base na configuração do Edge.

Como configurar o TLS entre os desenvolvedores e o portal

A maneira de configurar 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

Pantheon (em inglês)

A Pantheon oferece HTTPS automatizado sem custo financeiro para todos os sites na plataforma por meio da Cantheon Global CDN e do uso do 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 Ativar SSL.

Edge para portais de nuvem privada

Todas as instalações de nuvem privada recomendadas pela Apigee exigem que o portal esteja protegido por um balanceador de carga, conforme mostrado abaixo:

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

  • Configurar 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 depende do balanceador de carga. Consulte a documentação do seu balanceador de carga para mais informações.
  • Configurar o TLS no próprio portal: se necessário, você poderá configurar o TLS no servidor da Web que hospeda o portal. Por padrão, a Apigee instala o servidor da Web Apache. Para informações sobre como configurar o TLS para Apache, consulte Como ativar o protocolo HTTP seguro (HTTPS)

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

Como definir outras configurações de TLS

Você pode editar o arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada) para fazer alterações na configuração do 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: ini_set.

Você pode definir as seguintes propriedades no arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (nuvem privada):

  • cookie_httponly: (recomendado) especifica esse cookie como acessível somente pelo protocolo HTTP. Definir a 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 exibido por HTTPS. Se essa configuração for ativada, o site não funcionará com HTTP. Definir esta propriedade como:

    ini_set('session.cookie_secure', true);
  • gc_maslifetime e cookie_lifetime: (opcional) gc_lifeteime especifica o número de segundos após os quais os dados podem ser potencialmente excluídos, e cookie_lifetime especifica a vida útil do cookie em segundos. Definir essas propriedades como:

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

Para mais informações sobre a configuração do TLS entre o portal do desenvolvedor e os clientes, consulte Ativar o SSL para comunicação HTTPS segura (em inglês) no site do documento do Pantheon.

Como configurar TLS com balanceadores de carga

Para melhorar o desempenho, os balanceadores de carga às vezes são configurados para encerrar TLS. Com o encerramento de TLS, os balanceadores de carga descriptografam as mensagens enviadas por https:// e as encaminham para os servidores de back-end por http://. Isso poupa aos servidores de back-end a sobrecarga de descriptografar as 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 serão descriptografadas, o que abrirá uma brecha de segurança.

Se o portal do desenvolvedor for protegido por 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 somente links https://. Além disso, será necessário adicionar o código a seguir ao arquivo sites/default/settings.local.php (cloud) 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;
  }
}

Confira mais informações em:

Como redirecionar o tráfego do portal para HTTPS

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

Redirecionamento para HTTPS com o mesmo nome de host

Adicione o código a seguir ao seu arquivo sites/default/settings.local.php (cloud) 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 acessar seu portal em live-example.devportal.apigee.io, mas precisar acessar um certificado enviado 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;
  }
}

Redirecionamento para HTTPS em vários nomes de host

Adicione o código a seguir 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;
  }
}