Chamadas de API com erros de TLS

Esta é a documentação da Apigee e da Apigee híbrida.
Confira a documentação da Apigee Edge.

Sintoma

As solicitações da API Apigee híbrida falham com erros de conexão TLS. Esses erros geralmente são redefinições de conexão e falhas de handshake de alerta.

Mensagens de erro

As chamadas de API falham com TLS semelhante ao erro mostrado abaixo, ou outros erros, mas não idênticos:

* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* (304) (OUT), TLS handshake, Client hello (1):
* Recv failure: Connection reset by peer
* LibreSSL/3.3.6: error:02FFF036:system library:func(4095):Connection reset by peer
* Closing connection
curl: (35) Recv failure: Connection reset by peer
* (304) (OUT), TLS handshake, Client hello (1):
* LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure
* Closing connection
curl: (35) LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure

Causas possíveis

Causa Descrição Instruções de solução de problemas aplicáveis para
Secret do Kubernetes do Ingress ausente O secret do Kubernetes para org-envgroup não está no namespace da Apigee. Apigee híbrido
Certificado SSL formatado incorretamente O certificado SSL apontado para a seção virtualhosts do arquivo de substituições está formatado incorretamente. Apigee híbrido
As chaves SSL não correspondem ao certificado SSL As chaves SSL não correspondem ao certificado SSL apontado na seção virtualhosts do arquivo de modificações. Apigee híbrido

Causa: secret do Kubernetes de entrada ausente

Diagnóstico

  1. Analise os registros dos pods apigee-watcher no namespace da Apigee e confira se há erros.

    Talvez você veja um erro como este:
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    em que:
    • MY_HYBRID_PROJECT é o nome da organização da Apigee híbrida.
    • ENV_GROUP é o nome do grupo de ambiente
    O erro acima indica que apigee-watcher não encontrou o secret do K8S para o grupo de ambiente mencionado acima da organização da Apigee híbrida.
  2. Verifique se os secrets K8S estão realmente ausentes usando o seguinte comando:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
    <no output>
    Este exemplo não mostra secrets do Kubernetes para MY_HYBRID_PROJECT-ENV_GROUP. Elas podem ter sido excluídas por engano.

Resolução

É possível recriar os secrets ausentes do Kubernetes usando as informações dos arquivos de chaves e certificados TLS do arquivo overrides.yaml:

  1. Execute o comando a seguir para recriar as chaves secretas ausentes:
    apigeectl apply -f overrides/overrides.yaml --settings virtualhosts

    A saída do comando acima deve mostrar que o secret foi criado:

    secret/MY_HYBRID_PROJECT-ENV_GROUP created
  2. Verifique se os secrets do Kubernetes foram criados usando o comando a seguir:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP

    A saída desse comando vai mostrar:

    MY_HYBRID_PROJECT-ENV_GROUP                   Opaque                2      7s

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

Causa: certificado SSL formatado incorretamente

Diagnóstico

Primeiro, verifique se o arquivo do certificado é .PEM. Para verificar se o certificado SSL formatado corretamente foi carregado no apigee-ingressgateway, siga estas etapas.

Se você configurou o TLS unidirecional usando um par de certificado/chave, conforme descrito em Opção 1: par de chave/certificado, executar:

openssl x509 -in $CERT_FILE -text -noout

Exemplo de saída (sem erros):

Certificate:
  Data:
    Version: 1 (0x0)
    Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
    Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN
    Validity
      Not Before: Dec 18 09:40:23 2023 GMT
      Not After : May  1 09:40:23 2025 GMT
    Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com
    Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
        RSA Public-Key: (2048 bit)
        Modulus:
          Trimmed
        Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
          Trimmed

Se você configurou o TLS unidirecional usando um secret do Kubernetes, conforme descrito na Opção 2: secret do Kubernetes, execute:

kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d > certfile ;
openssl x509 -in certfile -text -noout

kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -text

Exemplo de saída (sem erros):

Certificate:
  Data:
    Version: 1 (0x0)
    Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
    Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN
    Validity
      Not Before: Dec 18 09:40:23 2023 GMT
      Not After : May  1 09:40:23 2025 GMT
    Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com
    Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
        RSA Public-Key: (2048 bit)
        Modulus:
          Trimmed
        Exponent: 65537 (0x10001)
  Signature Algorithm: sha1WithRSAEncryption
          Trimmed

Se a saída do comando acima for semelhante a

unable to load certificate
136613728412992:error:0D078095:asn1 encoding routines:asn1_item_embed_d2i:sequence not constructed:../crypto/asn1/tasn_dec.c:321:Type=X509
136613728412992:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:../crypto/pem/pem_oth.c:33:

Para erros como

error loading certificates
8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line

consulte a seção Resolução.

Resolução

Os erros podem variar dependendo do erro de formato do arquivo de certificado. Corrija o erro de certificado, se necessário.

Se a saída mostrar o certificado em vez de um erro, considere Causa: as chaves SSL não correspondem ao certificado SSL.

Causa: as chaves SSL não correspondem ao certificado SSL

Diagnóstico

Se você configurou o TLS unidirecional usando o par de certificado/chave, conforme descrito na Opção 1: par de chave/certificado, execute:

diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)

Exemplo de saída (sem erros):

diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem)
<No output>

Se você configurou o TLS unidirecional usando o secret do Kubernetes, conforme descrito na Opção 2: secret do Kubernetes, execute:

diff -q <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)

Exemplo de saída (sem erros):

diff -q <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)
<No output>

Se a saída do comando acima mostrar um erro como:

unable to load Private Key
133504499987776:error:09091064:PEM routines:PEM_read_bio_ex:bad base64 decode:../crypto/pem/pem_lib.c:949:
Files /dev/fd/63 and /dev/fd/62 differ

as chaves SSL não correspondem ao certificado SSL e consulte a seção Resolução.

Resolução

Verifique se você está fornecendo as chaves privadas corretas e os certificados SSL correspondentes. Corrija qualquer problema com a chave privada e o certificado SSL.

Se você não vir nenhuma saída do comando, o certificado SSL e a chave SSL correspondem.

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

Se o problema persistir depois que você seguir as instruções nesta página, colete as seguintes informações de diagnóstico e envie-as ao suporte da Apigee:

  1. Toda a saída detalhada curl em que você vê o erro.
  2. Capture um tcpdump na máquina em que você está vendo os erros e compartilhe-o removendo todas as informações sensíveis e endereços IP.
  3. Deixe toda a topologia e o fluxo de rede prontos após consultar sua equipe de rede para serem compartilhados com o suporte da Apigee.