Vous consultez la documentation Apigee Edge.
Accédez à la documentation Apigee X.
Problème constaté
L'application cliente reçoit un code d'état HTTP 503 Service Unavailable avec le code d'erreur messaging.adaptors.http.flow.SslHandshakeFailed en réponse aux appels d'API.
Message d'erreur
L'application cliente reçoit le code de réponse suivant :
HTTP/1.1 503 Service Unavailable
De plus, le message d'erreur suivant peut s'afficher :
{
"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"
}
}
}Causes possibles
Vous pouvez obtenir le code d'état 503 Service Unavailable avec le code d'erreur messaging.adaptors.http.flow.SslHandshakeFailed en raison d'un échec lors du processus de handshake SSL entre le processeur de messages d'Apigee Edge et le serveur de backend pour plusieurs raisons. Le message d'erreur dans faultstring indique généralement une cause possible de haut niveau ayant entraîné cette erreur.
En fonction du message d'erreur observé dans faultstring, vous devez utiliser les techniques appropriées pour résoudre le problème. Ce guide explique comment résoudre ce problème si le message d'erreur 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 s'affiche dans faultstring.
Cette erreur se produit lors du processus de handshake SSL entre le processeur de messages d'Apigee Edge et le serveur de backend :
- Si le truststore du processeur de messages d'Apigee Edge :
- Contient une chaîne de certificats qui ne correspond pas à la chaîne de certificats complète du serveur backend, OU
- Ne contient pas la chaîne de certificats complète du serveur backend
- Si la chaîne de certificats présentée par le serveur de backend :
- Contient un nom de domaine complet (FQDN) qui ne correspond pas au nom d'hôte spécifié dans le point de terminaison cible
- Contient une chaîne de certificats incorrecte ou incomplète
Voici les causes possibles de ce problème :
| Cause | Description | Instructions de dépannage applicables |
|---|---|---|
| Chaîne de certificats ou certificat incorrect ou incomplet dans le truststore du processeur de messages | Le certificat et/ou sa chaîne stockés dans le truststore du Processeur de messages d'Apigee Edge ne correspondent pas à la chaîne de certificats du serveur backend ou ne contiennent pas la chaîne de certificats complète du serveur backend. | Utilisateurs du cloud public et privé Edge |
| Le nom de domaine complet du certificat du serveur backend ne correspond pas au nom d'hôte du point de terminaison cible. | Le certificat présenté par le serveur backend contient un nom de domaine complet qui ne correspond pas au nom d'hôte spécifié dans le point de terminaison cible. | Utilisateurs d'Edge Private Cloud et Edge Public Cloud |
| Certificat ou chaîne de certificats incorrects/incomplets présentés par le serveur de backend | La chaîne de certificats présentée par le serveur de backend est incorrecte ou incomplète. | Utilisateurs d'Edge Private Cloud et Edge Public Cloud |
Étapes de diagnostic courantes
Utilisez l'un des outils/techniques suivants pour diagnostiquer cette erreur :
Surveillance des API
Procédure 1 : Utiliser la surveillance des API
Pour diagnostiquer l'erreur à l'aide d'API Monitoring :
- Connectez-vous à l'UI Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Basculez vers l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyser > API Monitoring > Examiner.
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Représentez graphiquement Code d'erreur par rapport à Heure.
Sélectionnez une cellule contenant le code d'erreur
messaging.adaptors.http.flow.SslHandshakeFailed, comme indiqué ci-dessous :
Les informations sur le code d'erreur
messaging.adaptors.http.flow.SslHandshakeFaileds'affichent comme indiqué ci-dessous :
Cliquez sur Afficher les journaux , puis développez la ligne correspondant à la demande ayant échoué.
- Dans la fenêtre Journaux, notez les informations suivantes :
- ID du message de demande
- Code d'état :
503 - Source de la défaillance :
target - Code d'erreur :
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
Procédure 2 : Utiliser l'outil Trace
Pour diagnostiquer l'erreur à l'aide de l'outil Trace :
- Activez la session de trace et l'une des options suivantes :
- Attendez que l'erreur
503 Service Unavailablese produise avec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailed. - Si vous pouvez reproduire le problème, effectuez l'appel d'API pour le reproduire.
503 Service Unavailable
- Attendez que l'erreur
Assurez-vous que l'option Afficher toutes les FlowInfos est activée :

- Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
- Parcourez les différentes phases de la trace et identifiez l'emplacement de l'échec.
L'erreur se trouve généralement après la phase Target Request Flow Started (Flux de requête cible démarré), comme indiqué ci-dessous :

- Notez les valeurs suivantes à partir de la trace :
- Erreur :
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 - La valeur de l'erreur
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetindique que le handshake SSL a échoué, car le processeur de messages d'Apigee Edge n'a pas pu valider le certificat du serveur de backend.
- Erreur :
- Accédez à la phase AX (données Analytics enregistrées) dans la trace, puis cliquez dessus.
Faites défiler la page jusqu'à la section En-têtes d'erreur liés aux détails de la phase et déterminez les valeurs de X-Apigee-fault-code, X-Apigee-fault-source et X-Apigee-Message-ID, comme indiqué ci-dessous :

- Notez les valeurs de X-Apigee-fault-code, X-Apigee-fault-source et X-Apigee-Message-ID :
| En-têtes d'erreur | Valeur |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
Procédure 3 : Utiliser les journaux d'accès NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX :
- Si vous êtes un utilisateur Private Cloud, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations clés sur HTTP
503 Service Unavailable. Vérifiez les journaux d'accès NGINX :
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Recherchez les éventuelles erreurs
503avec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailedpendant une durée spécifique (si le problème s'est produit dans le passé) ou s'il existe des requêtes qui échouent toujours avec503. Si vous trouvez des erreurs
503avec le X-Apigee-fault-code correspondant à la valeur demessaging.adaptors.http.flow.SslHandshakeFailed, déterminez la valeur de X-Apigee-fault-source.Exemple d'erreur 503 dans le journal d'accès NGINX :
L'exemple d'entrée ci-dessus du journal d'accès NGINX présente les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-source :
En-têtes Valeur X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
Journaux du processeur de messages
Procédure 4 : Utiliser les journaux du processeur de messages
- Déterminez l'ID de message de l'une des requêtes ayant échoué à l'aide d'API Monitoring, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans Étapes de diagnostic courantes.
Recherchez l'ID du message de requête spécifique dans le journal du processeur de messages (
/opt/apigee/var/log/edge-message-processor/logs/system.log). L'erreur suivante peut s'afficher :org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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 problemL'erreur ci-dessus indique que le handshake SSL a échoué entre le processeur de messages et le serveur de backend.
Une exception avec une trace de la pile détaillée s'affichera ensuite, comme indiqué ci-dessous :
org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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 targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) ... <snipped>Notez que l'échec de l'établissement de la liaison est dû aux raisons suivantes :
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetCela indique que le handshake SSL a échoué, car le processeur de messages d'Apigee Edge n'a pas pu valider le certificat du serveur de backend.
Cause : certificat ou chaîne de certificats incorrects/incomplets dans le truststore du processeur de messages
Diagnostic
- Déterminez le code d'erreur et la source de l'erreur observée à l'aide de la surveillance des API, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans Étapes de diagnostic courantes.
- Si le code d'erreur est
messaging.adaptors.http.flow.SslHandshakeFailed, déterminez le message d'erreur à l'aide de l'une des méthodes suivantes : - Recherchez error.cause à l'aide de l'outil Trace, comme expliqué dans Étapes de diagnostic courantes.
- Recherchez l'exception à l'aide des journaux du processeur de messages, comme expliqué dans Étapes de diagnostic courantes.
- Recherchez le
faultstringdans la réponse d'erreur à votre appel d'API, comme indiqué dans Message d'erreur. - Si le message d'erreur est
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", cela indique que le handshake SSL a échoué, car le processeur de messages d'Apigee Edge n'a pas pu valider le certificat du serveur de backend.
Vous pouvez déboguer ce problème en deux phases :
- Phase 1 : Déterminez la chaîne de certificats du serveur de backend
- Phase 2 : Comparez la chaîne de certificats stockée dans le truststore du Message Processor.
Phase 1
Phase 1 : Déterminez la chaîne de certificats du serveur de backend
Utilisez l'une des méthodes suivantes pour déterminer la chaîne de certificats du serveur de backend :
openssl
Exécutez la commande openssl sur le nom d'hôte du serveur de backend comme suit :
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
Notez la chaîne de certificats à partir du résultat de la commande ci-dessus :
Exemple de chaîne de certificats de serveur de backend à partir du résultat de la commande 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
- Si vous êtes un utilisateur du cloud public, capturez les paquets TCP/IP sur le serveur de backend.
- Si vous êtes un utilisateur du cloud privé, vous pouvez capturer les paquets TCP/IP sur le serveur backend ou le processeur de messages. Dans l'idéal, capturez-les sur le serveur de backend, car les paquets y sont déchiffrés.
Utilisez la commande tcpdump suivante pour capturer les paquets TCP/IP :
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Analysez les paquets TCP/IP à l'aide de l'outil Wireshark ou d'un outil similaire que vous connaissez.
Exemple d'analyse de Tcpdump
- Paquet 43 : le processeur de messages (source) a envoyé un message
Client Helloau serveur backend (destination). - Paquet 44 : le serveur backend accuse réception du message
Client Hellodu processeur de messages. - Paquet 45 : le serveur backend envoie le message
Server Helloainsi que son certificat. - Paquet 46 : le processeur de messages accuse réception du message
Server Helloet du certificat. Paquet 47 : le processeur de messages envoie un message
FIN, ACKsuivi deRST, ACKdans le paquet 48.Cela indique que la validation du certificat du serveur de backend par le processeur de messages a échoué. En effet, le processeur de messages ne dispose d'aucun certificat correspondant à celui du serveur de backend ou ne peut pas faire confiance au certificat du serveur de backend avec les certificats disponibles dans son truststore (celui du processeur de messages).
Vous pouvez revenir en arrière et examiner le paquet 45 pour déterminer la chaîne de certificats envoyée par le serveur backend.
- Dans cet exemple, vous pouvez voir que le serveur a envoyé un certificat de feuille avec
common name (CN) = mocktarget.apigee.net, suivi d'un certificat intermédiaire avecCN= GTS CA 1D4et d'un certificat racine avecCN = GTX Root R1.
Si vous avez déterminé que la validation du certificat du serveur a échoué, passez à la phase 2 : comparer le certificat du serveur backend et les certificats stockés dans le truststore du processeur de messages.
- Paquet 43 : le processeur de messages (source) a envoyé un message
Phase 2
Phase 2 : Comparez le certificat du serveur backend et les certificats stockés dans le truststore du processeur de messages.
- Déterminez la chaîne de certificats du serveur de backend.
- Déterminez le certificat stocké dans le truststore du processeur de messages en procédant comme suit :
Obtenez le nom de référence du truststore à partir de l'élément
TrustStoredans la sectionSSLInfoduTargetEndpoint.Examinons un exemple de section
SSLInfodans une configurationTargetEndpoint:<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>- Dans l'exemple ci-dessus, le nom de référence
TrustStoreestmyCompanyTruststoreRef. Dans l'interface utilisateur Edge, sélectionnez Environnements > Références. Notez le nom dans la colonne Référence pour la référence spécifique du truststore. Il s'agit du nom de votre truststore.
Dans l'exemple ci-dessus, le nom du truststore est le suivant :
myCompanyTruststoreRef :
myCompanyTruststore
Obtenez les certificats stockés dans le truststore (déterminé à l'étape précédente) à l'aide des API suivantes :
Obtenez tous les certificats pour un keystore ou un truststore. Cette API liste tous les certificats du truststore spécifique.
Utilisateur du cloud public :
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
Utilisateur Private Cloud :
curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
Où :
- ORGANIZATION_NAME est le nom de l'organisation.
- ENVIRONMENT_NAME est le nom de l'environnement.
- KEYSTORE_NAME est le nom du keystore.
- $TOKEN est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0.
- Les options
curlutilisées dans cet exemple sont décrites dans Utiliser curl.
Exemple de résultat :
Les certificats du truststore de l'exemple
myCompanyTruststoresont les suivants :[ "serverCert" ]
-
Obtenez les détails d'un certificat spécifique à partir d'un Keystore ou d'un Truststore.
Cette API renvoie des informations sur un certificat spécifique dans le truststore spécifique.
Utilisateur du cloud public :
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"
Utilisateur du Private Cloud
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"
Où :
- ORGANIZATION_NAME est le nom de l'organisation.
- ENVIRONMENT_NAME est le nom de l'environnement.
- KEYSTORE_NAME est le nom du keystore.
- CERT_NAME est le nom du certificat.
- $TOKEN est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0.
- Les options
curlutilisées dans cet exemple sont décrites dans Utiliser curl.
Exemple de résultat
Les détails de
serverCertaffichent le sujet et l'émetteur comme suit :Certificat de feuille/d'entité :
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Certificat intermédiaire :
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Vérifiez que le certificat de serveur réel obtenu à l'étape 1 et le certificat stocké dans le truststore obtenu à l'étape 3 correspondent. Si elles ne correspondent pas, il s'agit de la cause du problème.
Dans l'exemple ci-dessus, examinons un certificat à la fois :
- Certificat feuille :
Depuis le serveur de backend :
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
À partir du truststore du processeur de messages (client) :
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Le certificat feuille stocké dans le truststore correspond à celui du serveur backend.
- Certificat intermédiaire :
Depuis le serveur de backend :
s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
À partir du truststore du processeur de messages (client) :
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Le certificat intermédiaire stocké dans le truststore correspond à celui du serveur de backend.
- Certificat racine :
Depuis le serveur de backend :
s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
Le certificat racine est totalement absent du truststore du processeur de messages.
Étant donné que le certificat racine est manquant dans le truststore, le processeur de messages génère l'exception suivante :
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
et renvoie
503 Service Unavailableavec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailedaux applications clientes.
- Certificat feuille :
Solution
- Assurez-vous de disposer de la chaîne de certificats appropriée et complète du serveur backend.
- Si vous êtes un utilisateur du cloud public, suivez les instructions de la section Mettre à jour un certificat TLS pour le cloud afin de mettre à jour le certificat dans le truststore du processeur de messages d'Apigee Edge.
- Si vous êtes un utilisateur du cloud privé, suivez les instructions de la section Mettre à jour un certificat TLS pour le cloud privé afin de mettre à jour le certificat dans le truststore du processeur de messages Apigee Edge.
Cause : le nom de domaine complet du certificat du serveur de backend ne correspond pas au nom d'hôte du point de terminaison cible.
Si le serveur backend présente une chaîne de certificats contenant un FQDN qui ne correspond pas au nom d'hôte spécifié dans le point de terminaison cible, le processeur de messages d'Apigee Edge renvoie l'erreur 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.
Diagnostic
- Examinez le point de terminaison cible spécifique du proxy d'API dans lequel vous constatez cette erreur et notez le nom d'hôte du serveur backend :
Exemple 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>Dans l'exemple ci-dessus, le nom d'hôte du serveur de backend est
backend.company.com. Déterminez le nom de domaine complet dans le certificat du serveur backend à l'aide de la commande
openssl, comme indiqué ci-dessous :openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
Exemple :
openssl s_client -connect backend.company.com:443
Examinez la section
Certificate chainet notez le nom de domaine complet spécifié dans le nom commun (CN) du sujet du certificat feuille.Certificate chain 0 s:/
CN=backend.apigee.neti:/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 R1Dans l'exemple ci-dessus, le nom de domaine complet du serveur de backend est
backend.apigee.net.- Si le nom d'hôte du serveur backend obtenu à l'étape 1 et le nom de domaine complet obtenu à l'étape 2 ne correspondent pas, il s'agit de la cause de l'erreur.
- Dans l'exemple ci-dessus, le nom d'hôte du point de terminaison cible est
backend.company.com. Toutefois, le nom de domaine complet dans le certificat du serveur backend estbackend.apigee.net. Comme ils ne correspondent pas, vous obtenez cette erreur.
Solution
Pour résoudre ce problème, vous pouvez utiliser l'une des méthodes suivantes :
Nom de domaine complet correct
Mettez à jour le keystore du serveur de backend avec le nom de domaine complet correct, ainsi qu'une chaîne de certificats valide et complète :
- Si vous ne disposez pas d'un certificat de serveur de backend avec le nom de domaine complet approprié, procurez-vous le certificat approprié auprès d'une autorité de certification.
Vérifiez que vous disposez d'une chaîne de certificats de serveur backend valide et complète.
- Une fois que vous disposez de la chaîne de certificats valide et complète avec le nom de domaine complet correct du serveur backend dans le certificat de feuille ou d'entité, qui est identique au nom d'hôte spécifié dans le point de terminaison cible, mettez à jour le keystore du backend avec la chaîne de certificats complète.
Corriger le serveur backend
Mettez à jour le point de terminaison cible avec le nom d'hôte du serveur backend approprié :
- Si le nom d'hôte a été spécifié de manière incorrecte dans le point de terminaison cible, mettez à jour le point de terminaison cible pour qu'il comporte le nom d'hôte correct correspondant au nom de domaine complet dans le certificat du serveur backend.
Enregistrez les modifications apportées au proxy d'API.
Dans l'exemple ci-dessus, si le nom d'hôte du serveur backend a été spécifié de manière incorrecte, vous pouvez le corriger en utilisant le nom de domaine complet du certificat du serveur backend, c'est-à-dire
backend.apigee.net, comme suit :<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.apigee.net/resource</URL> </HTTPTargetConnection> </TargetEndpoint>
Cause : certificat ou chaîne de certificats incorrects/incomplets présentés par le serveur de backend
Diagnostic
- Obtenez la chaîne de certificats du serveur de backend en exécutant la commande
opensslsur le nom d'hôte du serveur de backend, comme suit :openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Notez le
Certificate chaindans le résultat de la commande ci-dessus.Exemple de chaîne de certificats de serveur de backend à partir du résultat de la commande openssl :
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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 - Vérifiez que vous disposez de la chaîne de certificats appropriée et complète, comme expliqué dans la section Valider la chaîne de certificats.
Si vous ne disposez pas de la chaîne de certificats valide et complète pour le serveur backend, il s'agit de la cause de ce problème.
Dans l'exemple de chaîne de certificats du serveur de backend ci-dessus, le certificat racine est manquant. Par conséquent, vous obtenez cette erreur.
Solution
Mettez à jour le keystore du serveur backend avec une chaîne de certificats valide et complète :
Vérifiez que vous disposez d'une chaîne de certificats de serveur de backend valide et complète.
- Mettez à jour la chaîne de certificats valide et complète dans le keystore du serveur backend.
Si le problème persiste, consultez la page Vous devez collecter des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Si le problème persiste, même après avoir suivi les instructions ci-dessus, rassemblez les informations de diagnostic suivantes, puis contactez l'assistance Apigee Edge :
- Si vous êtes un utilisateur du cloud public, veuillez fournir les informations suivantes :
- Nom de l'organisation
- Nom de l'environnement
- Nom du proxy d'API
- Commande
curlcomplète pour reproduire l'erreur - Fichier de trace affichant l'erreur
Résultat de la commande
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- Paquets TCP/IP capturés sur le serveur de backend
- Si vous êtes un utilisateur du cloud privé, fournissez les informations suivantes :
- Message d'erreur complet observé
- Bundle de proxy d'API
- Fichier de trace affichant l'erreur
- Journaux du processeur de messages
/opt/apigee/var/log/edge-message-processor/logs/system.log - Résultat de la commande
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - Paquets TCP/IP capturés sur le serveur de backend ou le processeur de messages.
- Sortie de l'API Get all certificates for a keystore or truststore (Obtenir tous les certificats pour un keystore ou un truststore), ainsi que les détails de chaque certificat obtenu à l'aide de l'API Get Cert Details from a Keystore or Truststore (Obtenir les détails d'un certificat à partir d'un keystore ou d'un truststore).