Échecs d'appels d'API avec erreurs TLS

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

Symptôme

Les requêtes API Apigee hybrid échouent avec des erreurs de connexion TLS. Ces erreurs sont généralement des réinitialisations de connexion et des échecs de handshake d'alerte.

Messages d'erreur

Les appels d'API échouent avec une erreur TLS semblable à celle présentée ci-dessous, ou d'autres erreurs non identiques :

* 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

Causes possibles

Cause Description Instructions de dépannage applicables
Secret Kubernetes de l'objet Ingress manquant Le secret Kubernetes pour org-envgroup ne figure pas dans l'espace de noms Apigee. Apigee hybrid
Format de certificat SSL incorrect Le format du certificat SSL indiqué dans la section "virtualhosts" du fichier de remplacement est incorrect. Apigee hybrid
Les clés SSL ne correspondent pas au certificat SSL Les clés SSL ne correspondent pas au certificat SSL qui pointe dans la section "virtualhosts" du fichier de remplacement. Apigee hybrid

Cause: secret Kubernetes de l'objet Ingress manquant

Diagnostic

  1. Analysez les journaux des pods apigee-watcher dans l'espace de noms Apigee et vérifiez la présence d'erreurs.

    Vous pouvez rencontrer une erreur semblable à celle-ci :
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    où :
    • MY_HYBRID_PROJECT est le nom de l'organisation Apigee Hybrid.
    • ENV_GROUP est le nom du groupe d'environnements.
    L'erreur ci-dessus indique que apigee-watcher n'a pas trouvé le secret Kubernetes pour le groupe d'environnements mentionné ci-dessus de l'organisation Apigee hybrid.
  2. Vérifiez que les secrets Kubernetes sont bel et bien manquants à l'aide de la commande suivante :
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
    <no output>
    Cet exemple ne montre aucun secret Kubernetes pour MY_HYBRID_PROJECT-ENV_GROUP. Ils auraient pu être supprimés par erreur.

Solution

Vous pouvez recréer les secrets Kubernetes manquants à l'aide des certificats TLS et des informations des fichiers de clés figurant dans le fichier overrides.yaml :

  1. Exécutez la commande suivante pour recréer les secrets manquants :
    apigeectl apply -f overrides/overrides.yaml --settings virtualhosts

    Le résultat de la commande ci-dessus devrait indiquer que le secret est créé :

    secret/MY_HYBRID_PROJECT-ENV_GROUP created
  2. Vérifiez que les secrets Kubernertes ont bien été créés à l'aide de la commande suivante :
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP

    Le résultat de cette commande devrait afficher :

    MY_HYBRID_PROJECT-ENV_GROUP                   Opaque                2      7s

Si le problème persiste, consultez la page Vous devez collecter des informations de diagnostic.

Cause : Le format du certificat SSL est incorrect

Diagnostic

Tout d'abord, assurez-vous que le fichier de certificat est un fichier .PEM. Pour vérifier si le certificat SSL correctement formaté est chargé dans apigee-ingressgateway, procédez comme suit :

Si vous avez configuré le protocole TLS unidirectionnel à l'aide d'une paire certificat/clé, comme décrit dans la section Option 1 : paire clé/certificat, exécutez :

openssl x509 -in $CERT_FILE -text -noout

Exemple de résultat (sans erreurs) :

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

Si vous avez configuré un protocole TLS unidirectionnel à l'aide d'un secret Kubernetes comme décrit dans la section Option 2 : secret Kubernetes, exécutez la commande suivante :

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

Exemple de résultat (sans erreurs) :

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

Si le résultat de la commande ci-dessus ressemble à ce qui suit :

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:

Pour les erreurs telles que :

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

Consultez la section Résolution.

Solution

Les erreurs peuvent varier en fonction du format utilisé dans le fichier de certificat. Corrigez l'erreur de certificat si nécessaire.

Si le résultat affiche le certificat au lieu d'une erreur, consultez la réponse suivante : Cause : Les clés SSL ne correspondent pas au certificat SSL.

Cause : Les clés SSL ne correspondent pas au certificat SSL

Diagnostic

Si vous avez configuré le protocole TLS unidirectionnel à l'aide d'une paire certificat/clé, comme décrit dans la section Option 1 : paire clé/certificat, exécutez la commande suivante :

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

Exemple de résultat (sans erreurs) :

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

Si vous avez configuré un protocole TLS unidirectionnel à l'aide d'un secret Kubernetes comme décrit dans la section Option 2 : secret Kubernetes, exécutez la commande suivante :

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)

Exemple de résultat (sans erreurs) :

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>

Si le résultat de la commande ci-dessus affiche une erreur du type :

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

cela signifie que les clés SSL ne correspondent pas au certificat SSL. Veuillez consulter la section Résolution.

Solution

Assurez-vous de fournir les clés privées appropriées et les certificats SSL correspondants. Résolvez les éventuels problèmes de clé privée ou de certificat SSL.

Si vous n'obtenez aucun résultat de la commande, le certificat SSL et la clé SSL correspondent.

Vous devez collecter des informations de diagnostic

Si le problème persiste après avoir suivi les instructions de cette page, veuillez rassembler les informations de diagnostic suivantes et les fournir à l'assistance Apigee :

  1. Résultat détaillé de curl dans lequel vous voyez l'erreur.
  2. Capturez un tcpdump sur la machine sur laquelle vous voyez les erreurs et partagez-le en supprimant toutes les informations sensibles et les adresses IP.
  3. Préparez l'intégralité de la topologie et du flux réseau après avoir consulté votre équipe réseau pour les partager avec l'assistance Apigee.