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 Edge Management para recuperar ou enviar informações.

    Ao criar um portal, uma das primeiras etapas que você precisa realizar é especificar o URL da API de gerenciamento de borda. Dependendo de como a API Edge Management estiver configurada, esse URL poderá usar o TLS. Consulte Comece a criar seu 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 as 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 deve ser enviado por HTTPS.

    A maneira como você configura o TLS para esse cenário depende de como o portal foi implantado: cloud 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 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 saber 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 do Edge baseada na nuvem, o URL da API Edge Management 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 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: cloud 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 TLS/SSL usando 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 tenha um balanceador de carga, conforme mostrado abaixo:

Portanto, para instalações no local, 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, não no portal. O procedimento usado para configurar o TLS depende do balanceador de carga. Consulte a documentação sobre seu 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. Por padrão, a Apigee instala o servidor da Web Apache. Para informações sobre como configurar o TLS para o Apache, consulte Como ativar o HTTP Secure (HTTPS) .

Você precisa conseguir 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 mudar a 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 (em inglês).

É 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 somente pelo protocolo HTTP. Defina 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 estiver ativada, o site não funcionará por HTTP. Definir essa propriedade como:

    ini_set('session.cookie_secure', true);
  • gc_maslifetime 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 do 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 do desenvolvedor 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 o encerramento de TLS e você quer que todo o tráfego seja veiculado por https://, as páginas do site precisam ter somente links https://, e você precisa adicionar o seguinte código ao seu arquivo 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 de host ou em vários.

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