Vous consultez la documentation d'Apigee Edge.
Consultez la
documentation Apigee X. en savoir plus
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
comme 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 backend pour diverses raisons. Le message d'erreur dans le faultstring
indique généralement une cause probable pouvant être à l'origine de cette erreur.
Selon le message d'erreur observé dans faultstring
, vous devez utiliser les techniques appropriées pour résoudre le problème. Ce playbook explique comment résoudre cette erreur 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 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 certificat est présentée 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
- 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 |
---|---|---|
Certificat ou chaîne de certificats incorrect/incomplète dans le Truststore du processeur de messages | Le certificat et/ou sa chaîne stockés dans le truststore du processeur de messages 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 de cloud privé et public Edge |
Incohérence entre le nom de domaine complet indiqué dans le certificat du serveur backend et le nom d'hôte dans le 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 de cloud privé et public Edge |
Certificat ou chaîne de certificats incorrect/incomplet présenté par le serveur backend | La chaîne de certificats présentée par le serveur backend est incorrecte ou incomplète. | Utilisateurs de cloud privé et public Edge |
Étapes de diagnostic courantes
Utilisez l'un des outils ou techniques suivants pour diagnostiquer cette erreur:
Surveillance des API
Procédure 1: Utiliser la surveillance des API
Pour diagnostiquer l'erreur à l'aide de la surveillance des API:
- Connectez-vous à l'interface utilisateur Apigee Edge en tant qu'utilisateur disposant du rôle approprié.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à la page Analyze > API Monitoring > Investigate (Analyser > Surveillance des API > Enquêter).
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Tracez le code d'erreur par rapport à l'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.SslHandshakeFailed
s'affichent comme indiqué ci-dessous:Cliquez sur Afficher les journaux , puis développez la ligne de la requête ayant échoué.
- Dans la fenêtre Journaux, notez les détails suivants :
- ID du message de requête
- Code d'état:
503
- Source de l'erreur:
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, puis effectuez l'une des opérations suivantes :
- Attendez que l'erreur
503 Service Unavailable
avec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailed
se produise, ou - 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 Show all FlowInfos (Afficher tous 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 localisez l'origine de l'échec.
L'erreur se produit généralement après la phase Début du flux de requête cible, comme indiqué ci-dessous:
- Notez les valeurs des éléments suivants à 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 target
indique que le handshake SSL a échoué, car le processeur de messages d'Apigee Edge n'a pas pu valider le certificat du serveur backend.
- erreur:
- Accédez à la phase AX (Données analytiques enregistrées) dans la trace et cliquez dessus.
Faites défiler la page jusqu'à la section En-têtes d'erreur des 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 n° 3: Utiliser les journaux d'accès NGINX
Pour diagnostiquer l'erreur à l'aide des journaux d'accès NGINX, procédez comme suit:
- Si vous êtes un utilisateur du cloud privé, vous pouvez utiliser les journaux d'accès NGINX pour déterminer les informations clés concernant 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 s'il existe des erreurs
503
avec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailed
pendant une durée spécifique (si le problème s'est produit par le passé) ou si des requêtes échouent toujours avec503
. Si vous trouvez des erreurs
503
avec le X-Apigee-fault-code correspondant à la valeur demessaging.adaptors.http.flow.SslHandshakeFailed
, déterminez la valeur de la X-Apigee-fault-source.Exemple d'erreur 503 du journal d'accès NGINX:
( Afficher l'image plus grande)
L'exemple d'entrée ci-dessus du journal d'accès NGINX contient les valeurs suivantes pour X-Apigee-fault-code et X-Apigee-fault-code :
En-têtes Valeur X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
X-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 de l'API Monitoring, de l'outil Trace ou des journaux d'accès NGINX, comme expliqué dans la section É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 se produire: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 problemL'erreur ci-dessus indique que le handshake SSL a échoué entre le processeur de messages et le serveur backend.
Cette étape est suivie d'une exception avec une trace de pile détaillée, comme indiqué ci-dessous:
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>Notez que l'échec du handshake est dû aux éléments suivants:
Caused by: 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 backend.
Cause: certificat ou chaîne de certificats incorrect/incomplet dans le Truststore du processeur de messages
Diagnostic
- Déterminez le code d'erreur, la source de l'erreur pour 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 la section É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: - Identifiez le fichier error.cause à l'aide de l'outil Trace, comme expliqué dans la section Étapes de diagnostic courantes.
- Recherchez l'exception à l'aide des journaux du processeur de messages, comme expliqué dans la section Étapes de diagnostic courantes.
- Recherchez
faultstring
dans la réponse d'erreur à votre appel d'API, comme indiqué dans le 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"
, il indique que le handshake SSL a échoué, car le processeur de messages d'Apigee Edge n'a pas pu valider le certificat du serveur backend.
Vous pouvez déboguer ce problème en deux phases:
- Phase 1:Déterminer la chaîne de certificats du serveur backend
- Phase 2:comparer la chaîne de certificats stockée dans le Truststore du processeur de messages
Phase 1
Phase 1: Déterminer la chaîne de certificats du serveur backend
Utilisez l'une des méthodes suivantes pour déterminer la chaîne de certificats du serveur backend:
openssl
Exécutez la commande openssl
sur le nom d'hôte du serveur backend comme suit:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
Notez la chaîne de certificats dans le résultat de la commande ci-dessus:
Exemple de chaîne de certificats du serveur 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 de cloud public, capturez les paquets TCP/IP sur le serveur 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. De préférence, capturez-les sur le serveur backend au fur et à mesure que les paquets sont déchiffrés sur le serveur backend.
Exécutez la commande tcpdump suivante pour capturer des 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
( Afficher l'image plus grande)
- Paquet n° 43:le processeur de messages (source) a envoyé un message
Client Hello
au serveur backend (destination). - Paquet n° 44:le serveur backend accuse réception du message
Client Hello
du processeur de messages. - Paquet n° 45:le serveur backend envoie le message
Server Hello
avec son certificat. - Paquet n° 46:le processeur de messages accuse réception du message
Server Hello
et du certificat. Paquet n° 47:le processeur de messages envoie un message
FIN, ACK
suivi deRST, ACK
dans le paquet n° 48.Cela indique que la validation du certificat du serveur backend par le processeur de messages a échoué. Cela est dû au fait que le processeur de messages ne dispose d'aucun certificat correspondant à celui du serveur backend, ou qu'il ne peut pas approuver le certificat du serveur backend avec les certificats disponibles dans son Truststore (celui du processeur de messages).
Vous pouvez revenir en arrière et examiner le paquet 45 et 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 d'entité finale avec
common name (CN) = mocktarget.apigee.net
, suivi d'un certificat intermédiaire avecCN= GTS CA 1D4
et d'un certificat racine avecCN = GTX Root R1
.
Si vous avez vérifié que la validation de la certification du serveur a échoué, passez à la section Phase 2: Comparer le certificat du serveur backend et les certificats stockés dans le Truststore du processeur de messages.
- Paquet n° 43:le processeur de messages (source) a envoyé un message
Phase 2
Phase 2: Comparer 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 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 magasin de confiance à partir de l'élément
TrustStore
de la sectionSSLInfo
du fichierTargetEndpoint
.Examinons un exemple de section
SSLInfo
dans 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
TrustStore
estmyCompanyTruststoreRef
. Dans l'interface utilisateur Edge, sélectionnez Environments > References (Environnements > Références). Notez le nom dans la colonne Reference (Référence) pour la référence du truststore spécifique. Il s'agira du nom de votre Trustedstore.
Dans l'exemple ci-dessus, le nom du magasin de confiance est:
myCompanyTruststoreRef:
myCompanyTruststore
Récupérez les certificats stockés dans le Truststore (déterminé à l'étape précédente) à l'aide des API suivantes:
Obtenez tous les certificats d'un keystore ou d'un magasin de confiance. Cette API liste tous les certificats du magasin de confiance 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
curl
utilisées dans cet exemple sont décrites dans la section Utiliser curl.
Exemple de résultat :
Les certificats de l'exemple de magasin de confiance
myCompanyTruststore
sont les suivants :[ "serverCert" ]
-
Obtenez les détails du certificat spécifique à partir d'un keystore ou d'un Truststore.
Cette API renvoie les informations sur un certificat spécifique contenu dans le magasin de confiance 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 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
curl
utilisées dans cet exemple sont décrites dans la section Utiliser curl.
Exemple de résultat
Les informations de
serverCert
indiquent l'objet et l'émetteur comme suit:Certificat de la feuille/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 obtenus à l'étape 3 correspondent. Si ce n'est pas le cas, c'est la cause du problème.
Dans l'exemple ci-dessus, examinons un certificat à la fois:
- Certificat de la feuille:
Depuis le serveur backend:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
À partir du Truststore (client) du processeur de messages:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Le certificat d'entité finale stocké dans le Truststore correspond à celui du serveur backend.
- Certificat intermédiaire:
Depuis le serveur 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 (client) du processeur de messages:
"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 backend.
- Certificat racine:
Depuis le serveur 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 complètement manquant dans le 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 Unavailable
avec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailed
aux applications clientes.
- Certificat de la feuille:
Résolution
- Assurez-vous de disposer de la chaîne de certificats correcte 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 pour mettre à jour le certificat vers 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é pour mettre à jour le certificat vers le magasin de confiance du processeur de messages d'Apigee Edge.
Cause: incohérence entre le nom de domaine complet indiqué dans le certificat du serveur backend et le nom d'hôte dans le point de terminaison cible
Si le serveur backend présente une chaîne de certificat contenant le nom de domaine complet, qui ne correspond pas au nom d'hôte spécifié dans le point de terminaison cible, le processus de message 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 dans le proxy d'API dans lequel vous observez 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 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 chain
et notez le nom de domaine complet spécifié dans le nom de domaine CN dans l'objet du certificat d'entité finale.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 R1Dans l'exemple ci-dessus, le nom de domaine complet du serveur backend est
backend.apigee.net
.- Si le nom d'hôte du serveur backend obtenu à l'étape 1 et le nom de domaine complet obtenus à l'étape 2 ne correspondent pas, c'est la cause de l'erreur.
- Dans l'exemple décrit ci-dessus, le nom d'hôte dans le point de terminaison cible est
backend.company.com
. Toutefois, le nom de domaine complet indiqué dans le certificat du serveur backend estbackend.apigee.net
. Comme ils ne correspondent pas, cette erreur s'affiche.
Résolution
Vous pouvez résoudre ce problème en utilisant l'une des méthodes suivantes:
Nom de domaine complet correct
Mettez à jour le keystore du serveur backend avec un 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 backend avec le nom de domaine complet approprié, procurez-vous le certificat approprié auprès d'une autorité de certification (autorité de certification) appropriée.
Vérifiez que la chaîne de certificats du serveur backend est 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 du serveur backend (dans le certificat d'entité finale ou le certificat d'entité) 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.
Serveur backend approprié
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é incorrectement spécifié dans le point de terminaison cible, mettez-le à jour afin qu'il corresponde au nom d'hôte correspondant au nom de domaine complet du certificat du serveur backend.
Enregistrez les modifications apportées au proxy d'API.
Dans l'exemple décrit ci-dessus, si le nom d'hôte du serveur backend n'a pas été spécifié correctement, vous pouvez le corriger en utilisant le nom de domaine complet du certificat du serveur backend, soit
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 incorrect/incomplet présenté par le serveur backend
Diagnostic
- Pour obtenir la chaîne de certificats du serveur backend, exécutez la commande
openssl
sur le nom d'hôte du serveur backend, comme suit :openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Notez la valeur
Certificate chain
dans le résultat de la commande ci-dessus.Exemple de chaîne de certificats du serveur 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 - Vérifiez que vous disposez d'une chaîne de certificats correcte et complète, comme expliqué dans la section Validation de la chaîne de certificats.
Si vous ne disposez pas d'une chaîne de certificats valide et complète pour le serveur backend, c'est la cause du problème.
Le certificat racine est manquant dans la chaîne de certificats du serveur backend illustrée ci-dessus. Par conséquent, vous obtenez cette erreur.
Résolution
Mettez à jour le keystore du serveur backend avec une chaîne de certificats valide et complète:
Vérifiez que la chaîne de certificats du serveur backend est 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 Recueil d'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 et contactez l'assistance Apigee Edge:
- Si vous êtes un utilisateur de cloud public, fournissez les informations suivantes :
- Le nom de l'organisation.
- Nom de l'environnement
- Nom du proxy d'API
- Exécutez la commande
curl
pour reproduire l'erreur. - Fichier de suivi 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 backend
- Si vous êtes un utilisateur de Private Cloud, fournissez les informations suivantes :
- Message d'erreur complet observé
- Groupe de proxys d'API
- Fichier de suivi 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 backend ou sur le processeur de messages
- Résultat de l'API Obtenir tous les certificats d'un keystore ou d'un Truststore, ainsi que les détails de chaque certificat obtenu à l'aide de l'API Obtenir les détails du certificat d'un keystore ou d'un Truststore.
Références
- Certificat Chaîne de confiance
- Commande OpenSSL