Como configurar o TLS do Edge para o back-end (nuvem e nuvem privada)

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

Um proxy de API funciona como um mapeamento de um endpoint disponível publicamente para seu serviço de back-end. Um host virtual define a maneira como o proxy de API público é exposto a um app. Por exemplo, o host virtual determina se o proxy de API pode ser acessado usando o TLS. Ao configurar um proxy de API, edite a definição do ProxyEndpoint para configurar os hosts virtuais que ele usa.

O TargetEndpoint é o equivalente de saída do ProxyEndpoint. Um TargetEndpoint funciona como um cliente HTTP do Edge para um serviço de back-end. Ao criar um proxy de API, você pode configurar para usar zero ou mais TargetEndpoints.

Saiba mais:

Como configurar um TargetEndpoint ou TargetServer

Para configurar um TargetEndpoint, edite o objeto XML que define o TargetEndpoint. É possível editar o TargetEndpoint editando o arquivo XML que define o TargetEndpoint no proxy de API ou editando-o na interface de gerenciamento do Edge.

Para usar a interface de gerenciamento do Edge para editar o TargetEndpoint:

  1. Faça login na interface de gerenciamento do Edge em https://enterprise.apigee.com.
  2. Selecione o nome do proxy de API a ser atualizado.
  3. Selecione a guia Desenvolver.
  4. Em Endpoints de destino, selecione padrão.
  5. Na área de código, a definição do TargetEndpoint aparece, semelhante à abaixo:
    <TargetEndpoint name="default">
      <Description/>
      <FaultRules/>
      <Flows/>
      <PreFlow name="PreFlow">
        <Request/>
        <Response/>
      </PreFlow>
      <PostFlow name="PostFlow">
        <Request/>
        <Response/>
      </PostFlow>
      <HTTPTargetConnection>
        <Properties/>
        <SSLInfo>
          <Enabled>true</Enabled>
          <TrustStore>ref://myTrustStoreRef</TrustStore>
        </SSLInfo>
        <URL>https://mocktarget.apigee.net</URL>
      </HTTPTargetConnection>
    </TargetEndpoint>
  6. Configure um truststore conforme descrito abaixo em Sobre a configuração do TLS com o back-end.
  7. Faça as mudanças necessárias e salve o proxy. Se o proxy de API tiver sido implantado, salvá-lo vai reimplantá-lo com a nova configuração.

Observe que a definição do TargetEndpoint contém uma propriedade name. Use o valor de a propriedade name para configurar a definição do ProxyEndpoint de um proxy de API para usar o TargetEndpoint. Consulte a Referência de configuração de proxy de API para mais informações.

Os TargetEndpoints podem ser configurados para referenciar um TargetServer, em vez do URL de destino explícito. Uma configuração do TargetServer separa os URLs de endpoint concretos das configurações do TargetEndpoint. Os TargetServers são usados para oferecer suporte ao balanceamento de carga e ao failover em várias instâncias do servidor de back-end.

Confira abaixo um exemplo de definição do TargetServer:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>80</Port>
  <IsEnabled>true</IsEnabled>
</TargetServer> 

Um TargetServer é referenciado pelo nome no <HTTPTargetConnection> elemento em uma definição do TargetEndpoint. É possível configurar um ou mais TargetServers nomeados, conforme mostrado abaixo.

<TargetEndpoint name="default">
  ...
  <HTTPTargetConnection>
    <LoadBalancer>
      <Server name="target1" />
      <Server name="target2" />
    </LoadBalancer>
    <Path>/test</Path>
  </HTTPTargetConnection>
  ...
</TargetEndpoint>

Consulte Balanceamento de carga entre servidores de back-end para mais informações.

Sobre a configuração do TLS com o back-end

Antes de configurar o acesso TLS ao back-end, é necessário entender dois pontos importantes:

  1. Por padrão, o Edge não valida o certificado de back-end. É necessário criar um truststore para configurar Edge para validar o certificado.
  2. Use uma referência para especificar o keystore ou truststore usado pelo Edge.

As duas considerações são descritas abaixo.

Como definir um truststore para ativar a validação de certificados

Ao fazer uma solicitação TLS por um TargetEndpoint ou TargetServer, o Edge não valida por padrão o certificado TLS recebido do servidor de back-end. Isso significa que o Edge não valida se:

  • O certificado foi assinado por uma AC confiável.
  • O certificado não expirou.
  • O certificado apresenta um nome comum. Se houver um nome comum, o Edge não vai validar se o nome comum corresponde ao nome do host especificado no URL.

Para configurar o Edge para validar o certificado de back-end, é necessário:

  1. Criar um truststore no Edge.
  2. Fazer upload do certificado ou da cadeia de certificados do servidor para o truststore. Se o certificado do servidor for assinado por terceiros, será necessário fazer upload da cadeia de certificados completa, incluindo o certificado da AC raiz, para o truststore. Não há ACs confiáveis implicitamente.
  3. Adicionar o truststore à definição do TargetEndpoint ou TargetServer.

Consulte Keystores e Truststores para mais informações.

Exemplo:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Como usar uma referência a um keystore ou truststore

O exemplo abaixo mostra como configurar um TargetEndpoint ou TargetServer para oferecer suporte ao TLS. Como parte da configuração do TLS, você especifica um truststore e um keystore como parte de uma definição do TargetEndpoint ou TargetServer.

A Apigee recomenda que você use uma referência ao keystore e ao truststore na definição do TargetEndpoints ou TargetServer. A vantagem de usar uma referência é que você só precisa atualizar a referência para apontar para um keystore ou truststore diferente para atualizar o certificado TLS.

As referências a keystores e truststores em a definição do TargetEndpoints ou TargetServer funcionam da mesma forma que para hosts virtuais.

Como converter um TargetEndpoint ou TargetServer para usar uma referência

Talvez você tenha definições de TargetEndpoint ou TargetServer que usem o nome literal do keystore e do truststore. Para converter a definição do TargetEndpoint ou TargetServer para usar referências:

  1. Atualize a definição do TargetEndpoint ou TargetServer para usar uma referência.
  2. Reinicie os processadores de mensagens do Edge:
    • Para clientes da nuvem pública, entre em contato com o suporte do Apigee Edge para reiniciar os processadores de mensagens.
    • Para clientes da nuvem privada, reinicie os processadores de mensagens do Edge um de cada vez.
  3. Confirme se o TargetEndpoint ou TargetServer está funcionando corretamente.

Como configurar o TLS unidirecional para o servidor de back-end

Ao usar uma definição do TargetEndpoint, a configuração do acesso TLS unidirecional do Edge (cliente TLS) ao servidor de back-end (servidor TLS) não exige nenhuma configuração adicional no Edge. É responsabilidade do servidor de back-end configurar o TLS corretamente.

Só é necessário verificar se o elemento <URL> na definição do TargetEndpoint referencia o serviço de back-end pelo protocolo HTTPS e se você ativou o TLS:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Se você estiver usando um TargetServer para definir o serviço de back-end, ative o TLS na definição do TargetServer:

<TargetServer name="target1">
  <Host>mocktarget.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
  </SSLInfo> 
</TargetServer> 

No entanto, se você quiser que o Edge valide o certificado de back-end, será necessário criar um truststore que contenha o certificado de back-end ou a cadeia de certificados. Em seguida, especifique o truststore em a definição do TargetEndpoint:

<TargetEndpoint name="default">
  …
  <HTTPTargetConnection>
    <SSLInfo>
      <Enabled>true</Enabled>
      <TrustStore>ref://myTrustStoreRef</TrustStore>
    </SSLInfo>
    <URL>https://myservice.com</URL>
  </HTTPTargetConnection>
  …
</TargetEndpoint>

Ou na definição do TargetServer:

<TargetServer name="target1">
  <Host>mockserver.apigee.net</Host>
  <Port>443</Port>
  <IsEnabled>true</IsEnabled>
  <SSLInfo>
    <Enabled>true</Enabled>
    <TrustStore>ref://myTrustStoreRef</TrustStore>
  </SSLInfo> 
</TargetServer>

Para configurar o TLS unidirecional:

  1. Se você quiser validar o certificado de back-end, crie um truststore no Edge e faça upload do certificado de back-end ou da cadeia de AC, conforme descrito em Keystores e Truststores. Para este exemplo, se você precisar criar um truststore, nomeie-o como myTrustStore.
  2. Se você criou um truststore, use a seguinte chamada de API POST para criar a referência chamada myTrustStoreRef ao truststore criado acima:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
      -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
      </ResourceReference>' -u email:password
    
  3. Use a interface de gerenciamento do Edge para atualizar a definição do TargetEndpoint para o proxy de API (ou, se você definir o proxy de API em XML, edite os arquivos XML do proxy):
    1. Faça login na interface de gerenciamento do Edge em https://enterprise.apigee.com.
    2. No menu da interface de gerenciamento do Edge, selecione APIs.
    3. Selecione o nome do proxy de API a ser atualizado.
    4. Selecione a guia Desenvolvimento.
    5. Em Endpoints de destino, selecione padrão.
    6. Na área de código, edite o <HTTPTargetConnection> elemento para adicionar o <SSLInfo> elemento. Especifique a referência correta do truststore e defina <Enabled> como verdadeiro:
      <TargetEndpoint name="default">
        …
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        …
      </TargetEndpoint>
    7. Salve o proxy de API. Se o proxy de API tiver sido implantado, salvá-lo vai reimplantá-lo com a nova configuração.

Como configurar o TLS bidirecional para o servidor de back-end

Se você quiser oferecer suporte ao TLS bidirecional entre o Edge (cliente TLS) e o servidor de back-end (servidor TLS):

  • Crie um keystore no Edge e faça upload do certificado e da chave privada do Edge.
  • Se você quiser validar o certificado de back-end, crie um truststore no Edge que contenha o certificado e a cadeia de AC recebidos do servidor de back-end.
  • Atualize o TargetEndpoint de todos os proxies de API que referenciam o servidor de back-end para configurar acesso TLS.

Como usar o alias de chave para especificar o certificado do keystore

É possível definir vários certificados, cada um com seu próprio alias, no mesmo keystore. Por padrão, o Edge usa o primeiro certificado definido no keystore.

Opcionalmente, é possível configurar o Edge para usar o certificado especificado pela propriedade <KeyAlias>. Isso permite definir um único keystore para vários certificados e selecionar aquele que você quer usar na definição do TargetServer. Se o Edge não encontrar um certificado com um alias que corresponda a <KeyAlias> ele usará a ação padrão de selecionar o primeiro certificado no keystore.

Os usuários do Edge para nuvem pública precisam entrar em contato com o suporte do Apigee Edge para ativar esse recurso.

Como configurar o TLS bidirecional

Para configurar o TLS bidirecional:

  1. Crie o keystore no Edge e faça upload do certificado e da chave privada usando o procedimento descrito aqui: Keystores e Truststores. Para este exemplo, crie um keystore chamado myTestKeystore que usa um nome de alias de myKey para o certificado e a chave privada.
  2. Use a seguinte chamada POST API para criar a referência nomeada myKeyStoreRef ao keystore criado acima:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myKeyStoreRef">
        <Refers>myTestKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    

    A referência especifica o nome do keystore e o tipo de referência como KeyStore.

    Use a chamada de API GET a seguir para visualizar a referência:

    curl -X GET https://api.enterprise.apigee.com/v1/o/[org_name}/e/{env_name}/references/myKeyStoreRef /
    -u email:password
    
  3. Se você quiser validar o certificado de back-end, crie um truststore no Edge e faça upload do certificado e da cadeia de AC conforme descrito aqui: Keystores e Truststores. Para este exemplo, se você precisar criar um truststore, nomeie-o como myTrustStore.
  4. Se você criou um truststore, use a seguinte chamada de API POST para criar a referência chamada myTrustStoreRef ao truststore criado acima:

    curl -X POST  -H "Content-Type:application/xml" https://api.enterprise.apigee.com/v1/o/{org_name}/e/{env_name}/references \
    -d '<ResourceReference name="myTrustStoreRef">
        <Refers>myTrustKeystore</Refers>
        <ResourceType>KeyStore</ResourceType>
    </ResourceReference>' -u email:password
    
  5. Use a interface de gerenciamento do Edge para atualizar a definição do TargetEndpoint para o proxy de API (ou, se você definir o proxy de API em XML, edite os arquivos XML do proxy):
    1. Faça login na interface de gerenciamento do Edge em https://enterprise.apigee.com.
    2. No menu da interface de gerenciamento do Edge, selecione APIs.
    3. Selecione o nome do proxy de API a ser atualizado.
    4. Selecione a guia Desenvolvimento.
    5. Em Endpoints de destino, selecione padrão.
    6. Na área de código, edite o elemento <HTTPTargetConnection> para adicionar o elemento <SSLInfo>. Especifique o keystore e o alias de chave corretos e defina os elementos <Enabled> e <ClientAuthEnabled> como verdadeiros:
      <TargetEndpoint name="default">
        ...
        <HTTPTargetConnection>
          <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeyStoreRef</KeyStore>
            <KeyAlias>myKey</KeyAlias>
          </SSLInfo>
          <URL>https://myservice.com</URL>
        </HTTPTargetConnection>
        ...
      </TargetEndpoint>
    7. Salve o proxy de API. Se o proxy de API tiver sido implantado, salvá-lo vai reimplantá-lo com a nova configuração.

Para mais informações sobre as opções disponíveis no <TargetEndpoint>, incluindo o uso de variáveis para fornecer valores <SSLInfo> do TargetEndpoint, consulte a Referência de configuração de proxy de API.

Como ativar o SNI

O Edge oferece suporte ao uso da Indicação de nome do servidor (SNI, na sigla em inglês) dos processadores de mensagens para endpoints de destino nas implantações do Apigee Edge para nuvem e para nuvem privada.

Para o Edge para nuvem privada, para ser compatível com versões anteriores dos back-ends de destino atuais, a Apigee desativou o SNI por padrão. Se o back-end de destino estiver configurado para oferecer suporte ao SNI, você poderá ativar esse recurso. Consulte Como usar o SNI com o Edge para mais informações.