503 Serviço indisponível - Falha no handshake de SSL

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

Sintoma

O aplicativo cliente recebe um código de status HTTP 503 Service Unavailable com o código de erro messaging.adaptors.http.flow.SslHandshakeFailed como resposta para chamadas de API.

Mensagem de erro

O aplicativo cliente recebe o seguinte código de resposta:

HTTP/1.1 503 Service Unavailable

Além disso, você pode receber a seguinte mensagem de erro:

{
   "fault":{
      "faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
      }
   }
}

Causas possíveis

Você pode receber o código de status 503 Service Unavailable com o código de erro messaging.adaptors.http.flow.SslHandshakeFailed devido a uma falha durante o processo de handshake de SSL entre o processador de mensagens do Apigee Edge e o servidor de back-end por vários motivos. A mensagem de erro em faultstring geralmente indica uma possível causa de alto nível que levou a esse erro.

Dependendo da mensagem de erro observada no faultstring, use técnicas adequadas para resolver o problema. Este manual explica como resolver esse erro se você observar a mensagem SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target no faultstring.

Esse erro ocorre durante o processo de handshake de SSL entre o processador de mensagens do Apigee Edge e o servidor de back-end:

  • Se o truststore do processador de mensagens do Apigee Edge:
    • Contém uma cadeia de certificados que não corresponde à cadeia de certificados completa do servidor de back-end, OU
    • Não contém a cadeia de certificados completa do servidor de back-end
  • Se a cadeia de certificados apresentada pelo servidor de back-end:

As possíveis causas para esse problema são as seguintes:

Causa Descrição Instruções de solução de problemas aplicáveis para
Certificado ou cadeia de certificados incorreta/incompleta no truststore do processador de mensagens O certificado e/ou a cadeia dele armazenados no repositório de confiança do processador de mensagens do Apigee Edge não correspondem à cadeia de certificados do servidor de back-end ou não contêm a cadeia de certificados completa do servidor de back-end. Usuários da nuvem pública e privada do Edge
Incompatibilidade do FQDN no certificado do servidor de back-end e no nome do host no endpoint de destino O certificado apresentado pelo servidor de back-end contém um FQDN que não corresponde ao nome do host especificado no endpoint de destino. Usuários da nuvem pública e privada do Edge
Certificado ou cadeia de certificados incorreta/incompleta apresentada pelo servidor de back-end A cadeia de certificados apresentada pelo servidor de back-end está incorreta ou incompleta. Usuários da nuvem pública e privada do Edge

Etapas comuns do diagnóstico

Use uma das seguintes ferramentas/técnicas para diagnosticar esse erro:

Monitoramento de APIs

Procedimento 1: usar o API Monitoring

Para diagnosticar o erro usando o API Monitoring:

  1. Faça login na interface do Apigee Edge como um usuário com um papel apropriado.
  2. Mude para a organização em que você quer investigar o problema.

  3. Acesse a página Analisar > Monitoramento de APIs > Investigar.
  4. Selecione o período específico em que você observou os erros.
  5. Crie um gráfico com Código de falha e Tempo.

  6. Selecione uma célula com o código de falha messaging.adaptors.http.flow.SslHandshakeFailed, conforme mostrado abaixo:

    ( ampliar imagem)

  7. As informações sobre o código de falha messaging.adaptors.http.flow.SslHandshakeFailed são mostradas conforme abaixo:

    ( ampliar imagem)

  8. Clique em Ver registros e expanda a linha da solicitação com falha.

    ( ampliar imagem)

  9. Na janela Registros, observe os seguintes detalhes:
    • ID da mensagem de solicitação
    • Código de status:503
    • Origem da falha:target
    • Código de falha:messaging.adaptors.http.flow.SslHandshakeFailed

Trace

Procedimento 2: usar a ferramenta Trace

Para diagnosticar o erro usando a ferramenta Trace:

  1. Ative a sessão de rastreamento e uma das seguintes opções:
    • Aguarde o erro 503 Service Unavailable com o código messaging.adaptors.http.flow.SslHandshakeFailed ou
    • Se for possível reproduzir o problema, faça a chamada de API para reproduzir o problema 503 Service Unavailable
  2. Verifique se a opção Mostrar todos os FlowInfos está ativada:

  3. Selecione uma das solicitações com falha e examine o rastreamento.
  4. Navegue pelas diferentes fases do rastreamento e localize onde a falha ocorreu.
  5. Normalmente, você encontra o erro depois da fase Fluxo de solicitação de destino iniciado, conforme mostrado abaixo:

    ( ampliar imagem)

  6. Observe os valores a seguir no rastreamento:
    • Erro:SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.cause::PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.class::com.apigee.errors.http.server.ServiceUnavailableException
    • O valor do erro SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target indica que o handshake SSL falhou porque o processador de mensagens do Apigee Edge não conseguiu validar o certificado do servidor de back-end.
  7. Navegue até a fase AX (dados do Analytics registrados) no rastreamento e clique nela.
  8. Role a tela para baixo até a seção Cabeçalhos de erro de detalhes da fase e determine os valores de X-Apigee-fault-code, X-Apigee-fault-source e X-Apigee-Message-ID, conforme mostrado abaixo:

    ( ampliar imagem)

  9. Observe os valores de X-Apigee-fault-code, X-Apigee-fault-source e X-Apigee-Message-ID:
  10. Cabeçalhos de erro Valor
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Procedimento 3: usar registros de acesso do NGINX

Para diagnosticar o erro usando registros de acesso do NGINX:

  1. Se você for um usuário do Private Cloud, poderá usar os registros de acesso do NGINX para determinar as principais informações sobre 503 Service Unavailable HTTP.
  2. Verifique os registros de acesso do NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Pesquise para ver se há erros de 503 com o código de erro messaging.adaptors.http.flow.SslHandshakeFailed durante um período específico (se o problema aconteceu no passado) ou se ainda há solicitações com falha em 503.
  4. Se você encontrar erros de 503 com o X-Apigee-fault-code correspondente ao valor de messaging.adaptors.http.flow.SslHandshakeFailed, determine o valor de X-Apigee-fault-source.

    Exemplo de erro 503 do registro de acesso do NGINX:

    ( ampliar imagem)

    A entrada de exemplo acima do registro de acesso do NGINX tem os seguintes valores para X-Apigee-fault-code e X-Apigee-fault-source:

    Cabeçalhos Valor
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Registros do processador de mensagens

Procedimento 4: usar registros do processador de mensagens

  1. Determine o ID da mensagem de uma das solicitações com falha usando o API Monitoring, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns de diagnóstico.
  2. Procure o ID da mensagem de solicitação específica no registro do processador de mensagens (/opt/apigee/var/log/edge-message-processor/logs/system.log). Talvez você veja o seguinte erro:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() :
    SSLClientChannel[Connected: Remote:X.X.X.X:443
    Local:192.168.194.140:55102]@64596 useCount=1
    bytesRead=0 bytesWritten=0 age=233ms  lastIO=233ms
    isOpen=true handshake failed, message: General SSLEngine problem
    

    O erro acima indica que o handshake de SSL falhou entre o processador de mensagens e o servidor de back-end.

    Isso será seguido por uma exceção com rastreamento de pilha detalhado, conforme mostrado abaixo:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() :
    RequestWriteListener.onException(HTTPRequest@1522922c)
    javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
    	at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
    	... <snipped>
    Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Alerts.getSSLException(Alerts.java:203)
    	at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
    	... <snipped>
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
    certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    	... <snipped>
      

    A falha no handshake ocorreu devido a:

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Isso indica que o handshake de SSL falhou porque o processador de mensagens do Apigee Edge não conseguiu validar o certificado do servidor de back-end.

Causa: certificado ou cadeia de certificados incorreta/incompleta no truststore do processador de mensagens

Diagnóstico

  1. Determine o código de falha e a origem da falha do erro observado usando o monitoramento de APIs, a ferramenta Trace ou os registros de acesso do NGINX, conforme explicado em Etapas comuns de diagnóstico.
  2. Se o código de falha for messaging.adaptors.http.flow.SslHandshakeFailed, determine a mensagem de erro usando um dos seguintes métodos:
  3. Se a mensagem de erro for sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", isso indica que o handshake de SSL falhou porque o processador de mensagens do Apigee Edge não conseguiu validar o certificado do servidor de back-end.

Você pode depurar esse problema em duas fases:

  1. Fase 1:determinar a cadeia de certificados do servidor de back-end
  2. Fase 2:compare a cadeia de certificados armazenada no truststore do processador de mensagens

Fase 1

Fase 1: determinar a cadeia de certificados do servidor de back-end

Use um dos seguintes métodos para determinar a cadeia de certificados do servidor de back-end:

openssl

Execute o comando openssl no nome do host do servidor de back-end da seguinte maneira:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

Anote a cadeia de certificados na saída do comando acima:

Exemplo de cadeia de certificados do servidor de back-end na resposta ao comando openssl:

Certificate chain
 0 s:/CN=mocktarget.apigee.net
   i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

tcpdump

  1. Se você for um usuário da nuvem pública, capture os pacotes TCP/IP no servidor de back-end.
  2. Se você for um usuário da nuvem privada, poderá capturar os pacotes TCP/IP no servidor de back-end ou no processador de mensagens. De preferência, capture-os no servidor de back-end, já que os pacotes são descriptografados nele.
  3. Use o seguinte comando tcpdump para capturar pacotes TCP/IP:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Analise os pacotes TCP/IP usando a ferramenta Wireshark ou outra semelhante que você conheça.

    Exemplo de análise do Tcpdump

    ( ampliar imagem)

    • Pacote 43:o processador de mensagens (origem) enviou uma mensagem Client Hello para o servidor de back-end (destino).
    • Pacote 44:o servidor de back-end confirma o recebimento da mensagem Client Hello do processador de mensagens.
    • Pacote nº 45:o servidor de back-end envia a mensagem Server Hello junto com o certificado.
    • Pacote nº 46:o processador de mensagens confirma o recebimento da mensagem Server Hello e do certificado.
    • Pacote 47:o processador de mensagens envia uma mensagem FIN, ACK seguida por RST, ACK no pacote 48.

      Isso indica que a validação do certificado do servidor de back-end pelo processador de mensagens falhou. Isso ocorre porque o processador de mensagens não tem nenhum certificado que corresponda ao certificado do servidor de back-end ou não pode confiar no certificado do servidor de back-end com os certificados disponíveis no repositório de confiança do processador de mensagens.

    • Volte e revise o pacote nº 45 e determine a cadeia de certificados enviada pelo servidor de back-end.

      ( ampliar imagem)

    • Neste exemplo, é possível ver que o servidor enviou um certificado folha com o common name (CN) = mocktarget.apigee.net, seguido por um certificado intermediário com CN= GTS CA 1D4 e um certificado raiz com CN = GTX Root R1.

    Se você tiver determinado que a validação do certificado do servidor falhou, acesse Fase 2: comparar o certificado do servidor de back-end e os certificados armazenados no truststore do processador de mensagens.

Fase 2

Fase 2: comparar o certificado do servidor de back-end e os certificados armazenados no repositório de confiança do processador de mensagens

  1. Determine a cadeia de certificados do servidor de back-end.
  2. Determine o certificado armazenado no truststore do processador de mensagens usando as seguintes etapas:
    1. Receba o nome de referência do truststore do elemento TrustStore na seção SSLInfo do TargetEndpoint.

      Confira um exemplo de seção SSLInfo em uma configuração TargetEndpoint:

      <TargetEndpoint name="default">
      ...
         <HTTPTargetConnection>
            <Properties />
            <SSLInfo>
               <Enabled>true</Enabled>
               <ClientAuthEnabled>true</ClientAuthEnabled>
               <KeyStore>ref://myKeystoreRef</KeyStore>
               <KeyAlias>myKey</KeyAlias>
               <TrustStore>
                  ref://myCompanyTrustStoreRef
               </TrustStore>
            </SSLInfo>
         </HTTPTargetConnection>
         ...
      </TargetEndpoint>
    2. No exemplo acima, o nome de referência TrustStore é myCompanyTruststoreRef.
    3. Na interface do usuário do Edge, selecione Ambientes > Referências. Observe o nome na coluna Referência para a referência específica do keystore de confiança. Esse será o nome do seu truststore.

      ( ampliar imagem)

    4. No exemplo acima, o nome do truststore é:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Receba os certificados armazenados no truststore (determinado na etapa anterior) usando as seguintes APIs:

    1. Receba todos os certificados de um keystore ou truststore. Essa API lista todos os certificados no truststore específico.

      Usuário da nuvem pública:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Usuário da nuvem privada:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Onde:

      • ORGANIZATION_NAME é o nome da organização
      • ENVIRONMENT_NAME é o nome do ambiente;
      • KEYSTORE_NAME é o nome do keystore.
      • $TOKEN está definido como seu token de acesso do OAuth 2.0, conforme descrito em Receber um token de acesso do OAuth 2.0
      • As opções de curl usadas neste exemplo estão descritas em Usar curl

      Exemplo de resposta:

      Os certificados do exemplo de keystore de confiança myCompanyTruststore são:

      [
        "serverCert"
      ]
    2. Receba os detalhes de um certificado específico de um armazenamento de chaves ou de confiança. Essa API retorna informações sobre um certificado específico no keystore de confiança específico.

      Usuário da nuvem pública:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Usuário da nuvem privada

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Onde:

      • ORGANIZATION_NAME é o nome da organização
      • ENVIRONMENT_NAME é o nome do ambiente;
      • KEYSTORE_NAME é o nome do keystore.
      • CERT_NAME é o nome do certificado.
      • $TOKEN está definido como seu token de acesso do OAuth 2.0, conforme descrito em Receber um token de acesso do OAuth 2.0
      • As opções de curl usadas neste exemplo estão descritas em Usar curl

      Exemplo de saída

      Os detalhes de serverCert mostram o assunto e o emissor da seguinte forma:

      Certificado de folha/entidade:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",

      Certificado intermediário:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
  4. Verifique se o certificado do servidor real obtido na etapa 1 e o certificado armazenado no repositório de confiança obtido na etapa 3 correspondem. Se não corresponderem, essa é a causa do problema.

    No exemplo acima, vamos analisar um certificado por vez:

    1. Certificado folha:

      No servidor de back-end:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4

      Do repositório de confiança do processador de mensagens (cliente):

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",

      O certificado folha armazenado no truststore corresponde ao do servidor de back-end.

    2. Certificado intermediário:

      No servidor de back-end:

      s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

      Do repositório de confiança do processador de mensagens (cliente):

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",

      O certificado intermediário armazenado no repositório de confiança corresponde ao do servidor de back-end.

    3. Certificado raiz:

      No servidor de back-end:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

      O certificado raiz está completamente ausente no truststore do processador de mensagens.

    4. Como o certificado raiz está ausente no truststore, o processador de mensagens gera a seguinte exceção:

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

      e retorna 503 Service Unavailable com o código de erro messaging.adaptors.http.flow.SslHandshakeFailed para os aplicativos clientes.

Resolução

  1. Verifique se você tem a cadeia de certificados adequada e completa do servidor de back-end.
  2. Se você for um usuário da nuvem pública, siga as instruções em Atualizar um certificado TLS para a nuvem para atualizar o certificado para o repositório de confiança do processador de mensagens do Apigee Edge.
  3. Se você for um usuário da nuvem privada, siga as instruções em Atualizar um certificado TLS para a nuvem privada para atualizar o certificado para o truststore do processador de mensagens do Apigee Edge.

Causa: o FQDN no certificado do servidor de back-end e o nome do host no endpoint de destino não correspondem

Se o servidor de back-end apresentar uma cadeia de certificados que contenha FQDN, que não corresponda ao nome de host especificado no endpoint de destino, o processo de mensagens do Apigee Edge vai retornar o erro SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

Diagnóstico

  1. Examine o endpoint de destino específico no proxy de API em que você está observando esse erro e anote o nome do host do servidor de back-end:

    Exemplo de TargetEndpoint:

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

    No exemplo acima, o nome do host do servidor de back-end é backend.company.com.

  2. Determine o FQDN no certificado do servidor de back-end usando o comando openssl conforme mostrado abaixo:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    Exemplo:

    openssl s_client -connect backend.company.com:443
    

    Examine a seção Certificate chain e observe o FQDN especificado como parte do CN no assunto do certificado folha.

    Certificate chain
     0 s:/CN=backend.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
     2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
    

    No exemplo acima, o FQDN do servidor de back-end é backend.apigee.net.

  3. Se o nome do host do servidor de back-end obtido na etapa 1 e o FQDN obtido na etapa 2 não corresponderem, essa será a causa do erro.
  4. No exemplo discutido acima, o nome do host no endpoint de destino é backend.company.com. No entanto, o nome do FQDN no certificado do servidor de back-end é backend.apigee.net. Como eles não correspondem, você recebe esse erro.

Resolução

Para corrigir esse problema, use um dos seguintes métodos:

FQDN correto

Atualize o keystore do servidor de back-end com o FQDN correto e uma cadeia de certificados válida e completa:

  1. Se você não tiver um certificado de servidor de back-end com o FQDN correto, consiga o certificado adequado de uma AC (autoridade certificadora) apropriada.
  2. Valide se você tem uma cadeia de certificados válida e completa do servidor de back-end.

  3. Depois de ter a cadeia de certificados válida e completa com o FQDN correto do servidor de back-end no certificado de folha ou de entidade idêntico ao nome do host especificado no endpoint de destino, atualize o keystore do back-end com a cadeia de certificados completa.

Servidor de back-end correto

Atualize o endpoint de destino com o nome do host correto do servidor de back-end:

  1. Se o nome do host foi especificado incorretamente no endpoint de destino, atualize o endpoint de destino para ter o nome de host correto que corresponde ao FQDN no certificado do servidor de back-end.
  2. Salve as mudanças no proxy de API.

    No exemplo acima, se o nome do host do servidor de back-end foi especificado incorretamente, use o FQDN do certificado do servidor de back-end, ou seja, backend.apigee.net, da seguinte maneira:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>

Causa: certificado ou cadeia de certificados incorreta/incompleta apresentada pelo servidor de back-end

Diagnóstico

  1. Para receber a cadeia de certificados do servidor de back-end, execute o comando openssl no nome do host do servidor de back-end da seguinte maneira:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Anote o Certificate chain na saída do comando acima.

    Exemplo de cadeia de certificados do servidor de back-end na resposta ao comando openssl:

    Certificate chain
     0 s:/CN=mocktarget.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       
  2. Verifique se você tem a cadeia de certificados adequada e completa, conforme explicado em Validar a cadeia de certificados.
  3. Se você não tiver a cadeia de certificados válida e completa para o servidor de back-end, essa é a causa do problema.

    Na cadeia de certificados do servidor de back-end de exemplo mostrada acima, o certificado raiz está ausente. Portanto, você recebe esse erro.

Resolução

Atualize o keystore do servidor de back-end com uma cadeia de certificados válida e completa:

  1. Valide se você tem uma cadeia de certificados válida e completa do servidor de back-end.

  2. Atualize a cadeia de certificados válida e completa no keystore do servidor de back-end.

Se o problema persistir, acesse Precisa de informações de diagnóstico.

É necessário coletar informações de diagnóstico

Se o problema persistir mesmo depois de seguir as instruções acima, reúna as seguintes informações de diagnóstico e entre em contato com o suporte do Apigee Edge:

  • Se você for um usuário da nuvem pública, forneça as seguintes informações:
    • Nome da organização
    • Nome do ambiente
    • Nome do proxy de API
    • Comando curl completo para reproduzir o erro
    • Arquivo de rastreamento mostrando o erro
    • Saída do comando openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Pacotes TCP/IP capturados no servidor de back-end
  • Se você for um usuário da nuvem privada, forneça as seguintes informações:

Referências