Como usar o TLS no portal

Você está vendo a documentação do Apigee Edge.
Acesse a 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 você o implantou:

  • Cloud: configure o TLS do Pantheon ou do Acquia, os serviços de hospedagem baseados na nuvem do 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 Edge Management.

    O portal não funciona como um sistema autônomo. Em vez disso, grande parte das informações usadas pelo portal é armazenada 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 à API de gerenciamento do Edge para recuperar ou enviar informações.

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

    Quando você usa o portal de serviços para desenvolvedores para implantar suas APIs, seus 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 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 o portal foi implantado: nuvem ou Apigee Edge para nuvem privada. As seções a seguir descrevem os dois cenários.

Configurar o TLS entre o portal e a API Edge Management

A configuração da API de gerenciamento de borda 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 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 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 Edge Management usando o URL https://api.enterprise.apigee.com/v1.

Instalação do Edge na nuvem privada

Para uma instalação de nuvem privada do Edge, o URL da API de gerenciamento de borda tem este 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.

Configurar o TLS entre desenvolvedores e o portal

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

Portais baseados na nuvem

Panteão (em inglês)

A Pantheon oferece HTTPS automatizado e sem custo financeiro para todos os sites da plataforma pela Cantheon 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 SSL.

Edge para portais de nuvem privada

Todas as instalações de nuvem privada recomendadas da Apigee no portal exigem que o portal esteja por trás de um balanceador de carga, conforme mostrado abaixo:

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

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

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

Definir outras configurações do TLS

Edite o arquivo sites/default/settings.local.php (nuvem) ou sites/default/settings.php (Nuvem privada) para fazer mudanças 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: 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 esse cookie como acessível apenas 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 exibido por HTTPS. Se essa configuração estiver ativada, o site não funcionará por HTTP. Definir essa propriedade como:

    ini_set('session.cookie_secure', true);
  • gc_maxlifetime e cookie_lifetime: (opcional) gc_lifeteime especificam o número de segundos em que os dados podem ser apagados, e cookie_lifetime especifica o ciclo de vida do cookie em segundos. Defina as 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 de documentos do Pantheon.

Como configurar o TLS com balanceadores de carga

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

Se o portal do desenvolvedor fica atrás de balanceadores de carga que usam encerramento de TLS e você quer que todo o tráfego seja veiculado por https://, as páginas do site só precisam ter links https:// e você precisa adicionar o seguinte código ao seu arquivo de 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 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:

Como redirecionar o tráfego do portal para HTTPS

É possível 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 de acordo com o redirecionamento para HTTPS no mesmo nome do host ou em vários.

Redirecionando para HTTPS no mesmo nome de host

Adicione o seguinte código 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 estiver acessando seu portal em live-example.devportal.apigee.io, mas precisar acessar um certificado que foi 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;
  }
}

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