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
- 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 :
où :NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
MY_HYBRID_PROJECT
est le nom de l'organisation Apigee Hybrid.ENV_GROUP
est le nom du groupe d'environnements.
apigee-watcher
n'a pas trouvé le secret Kubernetes pour le groupe d'environnements mentionné ci-dessus de l'organisation Apigee hybrid. - 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 pourMY_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
:
- 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
- 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 :
- Résultat détaillé de
curl
dans lequel vous voyez l'erreur. - 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. - 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.