<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
Symptôme
L'application cliente obtient le code d'état HTTP 503 Service Unavailable
avec le paramètre
Code d'erreur messaging.adaptors.http.flow.SslHandshakeFailed
comme réponse pour l'API
appels.
Message d'erreur
L'application cliente reçoit le code de réponse suivant:
HTTP/1.1 503 Service Unavailable
Le message d'erreur suivant peut également 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
Le code d'état 503 Service Unavailable
peut s'afficher avec le code d'erreur
messaging.adaptors.http.flow.SslHandshakeFailed
en raison d'une défaillance lors de la connexion SSL
de handshake entre le processeur de messages d'Apigee Edge et le serveur backend pendant plusieurs
raisons. Le message d'erreur dans faultstring
indique généralement
une cause possible de haut niveau
à 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 vous voyez 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
dans faultstring
.
Cette erreur se produit pendant le processus de handshake SSL entre le processeur de messages d'Apigee Edge et au serveur backend:
- Si le truststore du processeur de messages d'Apigee Edge:
<ph type="x-smartling-placeholder">
- </ph>
- Contient une chaîne de certificats qui ne correspond pas à la version complète du serveur chaîne de certificats, OU
- Il 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 backend:
<ph type="x-smartling-placeholder">
- </ph>
- Contient 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
Les causes possibles de ce problème sont les suivantes:
Cause | Description | Instructions de dépannage applicables |
---|---|---|
Certificat ou chaîne de certificats incorrect/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 de cloud privé et public Edge |
Incohérence entre le nom de domaine complet 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'une des techniques ou l'un des outils suivants pour diagnostiquer ce problème:
Surveillance des API
Procédure n° 1: Utiliser la surveillance des API
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'API Monitoring, procédez comme suit:
- <ph type="x-smartling-placeholder"></ph> Connectez-vous à l'interface utilisateur d'Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.
- Accédez à Analyser > Surveillance des API > Examiner.
- Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
Représentez le code d'erreur par rapport à l'heure.
<ph type="x-smartling-placeholder">Sélectionnez une cellule contenant le code d'erreur
messaging.adaptors.http.flow.SslHandshakeFailed
tel qu'illustré ci-dessous:Informations sur le code d'erreur
messaging.adaptors.http.flow.SslHandshakeFailed
s'affiche sous la forme comme indiqué ci-dessous:Cliquez sur Afficher les journaux et développez la ligne correspondant à la requête ayant échoué.
- Dans la fenêtre Journaux, notez les détails suivants:
<ph type="x-smartling-placeholder">
- </ph>
- Demander un ID de message
- Code d'état:
503
- Source de l'erreur:
target
- Code d'erreur:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
Procédure n° 2: Utiliser l'outil Trace
<ph type="x-smartling-placeholder">Pour diagnostiquer l'erreur à l'aide de l'outil Trace:
- Activez la session de trace, puis
<ph type="x-smartling-placeholder">
- </ph>
- Attendez l'erreur
503 Service Unavailable
avec le code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailed
ne doit pas avoir lieu, ou - Si vous pouvez reproduire le problème, effectuez l'appel d'API pour le reproduire.
503 Service Unavailable
- Attendez l'erreur
Assurez-vous que l'option Show all FlowInfos (Afficher toutes les infos 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 s'affiche 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:
<ph type="x-smartling-placeholder">
- </ph>
- 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 la connexion certificat.
- erreur:
- Accédez à la phase AX (Données analytiques enregistrées) dans la trace, puis cliquez dessus.
Faites défiler la page jusqu'à la section Phase Details Error Headers (En-têtes d'erreur des détails de la phase) et déterminez les valeurs de X-Apigee-fault-code et 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
<ph type="x-smartling-placeholder">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 concernant HTTP
503 Service Unavailable
. Vérifiez les journaux d'accès NGINX:
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Effectuez une recherche pour voir s'il existe des erreurs
503
avec un code d'erreurmessaging.adaptors.http.flow.SslHandshakeFailed
pendant une durée spécifique (si le problème est survenu pendant ou si des requêtes échouent toujours avec503
. Si vous trouvez des erreurs
503
avec la correspondance X-Apigee-fault-code la valeur demessaging.adaptors.http.flow.SslHandshakeFailed
, puis déterminer 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 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 de processeur de messages
Procédure n° 4: Utiliser les journaux du processeur de messages
<ph type="x-smartling-placeholder">- Déterminez l'ID de message de l'une des requêtes ayant échoué à l'aide de la surveillance des API, de l'outil Trace ou NGINX Access Logs, comme expliqué dans la section Étapes de diagnostic courantes.
Rechercher 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
). Vous pouvez observer l'erreur suivante: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 la négociation SSL a échoué entre le processeur de messages et le serveur backend.
Cette action 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 imputable 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 target
Cela indique que le handshake SSL a échoué car le processeur de messages d'Apigee Edge était impossible de 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 et la source du défaut pour l'erreur observée à l'aide de l'API. Monitoring, l'outil Trace ou les journaux d'accès NGINX comme expliqué dans la section étapes de diagnostic.
- Si le code d'erreur est
messaging.adaptors.http.flow.SslHandshakeFailed
, alors déterminez le message d'erreur en utilisant l'une des méthodes suivantes: - Recherchez la propriété 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
à partir de la réponse d'erreur à votre appel d'API, comme illustré 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 signifie que le handshake SSL a échoué, car le processeur de messages d'Apigee Edge n'a pas pu valider la connexion certificat.
Vous pouvez déboguer ce problème en deux phases:
- Phase 1:Déterminer la chaîne de certificats du serveur backend
- Phase 2: Comparez 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
<ph type="x-smartling-placeholder">Exécutez la commande openssl
sur l'hôte du serveur backend.
comme suit:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
Notez la chaîne de certificats indiquée dans le résultat de la commande ci-dessus:
Exemple de chaîne de certificats de 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
<ph type="x-smartling-placeholder">- Si vous êtes un utilisateur de cloud public, capturez les paquets TCP/IP sur le à votre serveur backend.
- Si vous êtes un utilisateur de Private Cloud, vous pouvez capturer le trafic TCP/IP paquets sur le serveur backend ou le processeur de messages. De préférence, capturez-les sur le serveur backend lorsque les paquets sont déchiffrés sur le serveur backend.
Utilisez les éléments suivants : <ph type="x-smartling-placeholder"></ph> tcpdump pour capturer les paquets TCP/IP:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
<ph type="x-smartling-placeholder">Analyser les paquets TCP/IP à l'aide du l'outil Wireshark ou un outil similaire à celui que vous connaissez.
Exemple d'analyse de tcpdump
- Paquet n° 43:le processeur de messages (source) a envoyé un
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
Server Hello
ainsi que son certificat. - Paquet n° 46:le processeur de messages accuse réception du
Server Hello
et le certificat. Paquet n° 47:le processeur de messages envoie un
FIN, ACK
suivi deRST, ACK
dans le paquet n° 48.Cela indique que la validation du certificat du serveur backend par Échec du processeur de messages. C'est parce que le processeur de messages n'a pas Tout certificat correspondant à celui du serveur backend ou qui ne peut pas faire confiance le certificat du serveur backend avec les certificats disponibles dans son (processeur de messages).
Vous pouvez revenir en arrière, consulter le paquet n° 45 et déterminer le certificat envoyée par le serveur backend
- Dans cet exemple, vous pouvez voir que le serveur a envoyé un certificat d'entité finale
par
common name (CN) = mocktarget.apigee.net
, suivi d'un certificat intermédiaire avecCN= GTS CA 1D4
et certificat racine avecCN = GTX Root R1
.
Si vous êtes sûr que la validation de la certification du serveur a échoué, accéder à Phase 2: comparer les certificats 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
Phase 2
Phase 2: Comparez le certificat du serveur backend avec les certificats stockés dans le Magasin de confiance 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 utilisant
procédez comme suit:
<ph type="x-smartling-placeholder">
- </ph>
Obtenez le nom de référence du truststore à partir de l'élément
TrustStore
dans la sectionSSLInfo
duTargetEndpoint
.Examinons un exemple de section
SSLInfo
dans uneTargetEndpoint
. configuration:<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 Environnements > Références : Notez le nom dans Colonne Référence pour la référence du truststore spécifique. Ce sera votre « Truststore ».
Dans l'exemple ci-dessus, le nom du truststore est le suivant:
myCompanyTruststoreRef:
myCompanyTruststore
Obtenir les certificats stockés dans le truststore (déterminé à l'étape précédente) à l'aide des API suivantes:
<ph type="x-smartling-placeholder"></ph> Obtenez tous les certificats d'un keystore ou d'un truststore. Cette API répertorie l'ensemble des dans le truststore concerné.
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 Obtenir un jeton d'accès OAuth 2.0
- Les options
curl
utilisées dans cet exemple sont décrites dans Utiliser curl
Exemple de résultat :
Les certificats de l'exemple de magasin de confiance
myCompanyTruststore
sont les suivants:[ "serverCert" ]
- <ph type="x-smartling-placeholder"></ph>
Obtenez les détails du certificat spécifique à partir d'un keystore ou d'un Truststore.
Cette API renvoie les informations relatives à un certificat spécifique dans le
Truststore.
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 Obtenir un jeton d'accès OAuth 2.0
- Les options
curl
utilisées dans cet exemple sont décrites dans Utiliser curl
Exemple de résultat
Les détails de
serverCert
indiquent l'objet et l'émetteur comme suit:Certificat 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 du serveur réel obtenu à l'étape 1 et le certificat stocké dans le truststore obtenu à l'étape 3. Si ce n'est pas le cas, la cause du problème.
Dans l'exemple présenté ci-dessus, examinons un certificat à la fois:
- Certificat 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 feuille stocké dans le truststore correspond à celui du backend. Google Cloud.
- 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 à votre 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 absent du certificat Truststore.
Comme le certificat racine est manquant dans le truststore, le 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
au client applications.
- Certificat feuille:
Solution
- Assurez-vous que vous disposez de la chaîne de certificats appropriée et complète du serveur backend.
- Si vous êtes un utilisateur de cloud public, suivez les instructions fournies dans <ph type="x-smartling-placeholder"></ph> Mettre à jour un certificat TLS pour le cloud afin de le mettre à jour vers le Magasin de confiance du processeur de messages.
- Si vous êtes un utilisateur du Private Cloud, suivez les instructions de la <ph type="x-smartling-placeholder"></ph> Mettre à jour un certificat TLS pour le cloud privé afin de mettre à jour le certificat pour Le Truststore d'Apigee Edge pour les processeurs de messages.
Cause: différence entre le nom de domaine complet 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 certificats contenant un 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 ceci
et notez le nom d'hôte du serveur backend:
Exemple de point de terminaison cible:
<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
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é en tant que une partie de 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 obtenu ne correspondent pas, c'est la cause de l'erreur.
- Dans l’exemple discuté 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, vous obtenez cette erreur.
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 le nom de domaine complet correct ainsi que le certificat valide et complet. chaîne:
- Si vous ne disposez pas d'un certificat de serveur backend avec le nom de domaine complet correct, Procurez-vous ensuite le certificat approprié auprès d'une autorité de certification (CA) appropriée.
Vérifiez que vous disposez d'une chaîne de certificats valide et complète.
<ph type="x-smartling-placeholder">- Une fois que vous disposez d'une chaîne de certificats valide et complète avec le nom de domaine complet correct du serveur backend dans le certificat d'entité finale 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 complète de la chaîne de certificats.
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 n'a pas été correctement spécifié dans le point de terminaison cible, mettez à jour le que le nom d'hôte du point de terminaison cible corresponde au nom de domaine complet du backend certificat du serveur.
Enregistrez les modifications apportées au proxy d'API.
Dans l'exemple mentionné ci-dessus, si le nom d'hôte du serveur backend était incorrect vous pouvez le résoudre en utilisant le nom de domaine complet du certificat du serveur backend, qui est
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
- Obtenez la chaîne de certificats du serveur backend en exécutant la commande
openssl
. par rapport au nom d'hôte du serveur backend, comme suit:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Notez la valeur
Certificate chain
indiquée dans le résultat de la commande ci-dessus.Exemple de chaîne de certificats de 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 de la chaîne de certificats appropriée et complète, comme expliqué dans 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, c'est la cause du problème.
Dans l'exemple de chaîne de certificats du serveur backend présenté ci-dessus, le certificat racine est sont manquantes. Vous obtenez donc cette erreur.
Solution
Mettez à jour le keystore du serveur backend avec une chaîne de certificats valide et complète:
<ph type="x-smartling-placeholder"></ph> Vérifiez que vous disposez d'une chaîne de certificats du serveur backend valide et complète.
<ph type="x-smartling-placeholder">- Mettez à jour la chaîne de certificats valide et complète dans le keystore du serveur backend.
Si le problème persiste, consultez doit recueillir des informations de diagnostic.
Vous devez collecter des informations de diagnostic
Si le problème persiste alors que vous avez suivi les instructions ci-dessus, rassemblez les informations suivantes : les informations de diagnostic et contactez l'assistance Apigee Edge:
- Si vous êtes un utilisateur de cloud public, fournissez les informations suivantes:
<ph type="x-smartling-placeholder">
- </ph>
- 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 du Private Cloud, fournissez les informations suivantes:
<ph type="x-smartling-placeholder">
- </ph>
- 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 le processeur de messages.
- Sortie de <ph type="x-smartling-placeholder"></ph> Permet d'obtenir tous les certificats d'une API keystore ou truststore, ainsi que les détails de chaque certificat obtenu à l'aide <ph type="x-smartling-placeholder"></ph> Obtenez les détails du certificat à partir d'un keystore ou d'une API Truststore.
Références
- Chaîne de confiance du certificat
- Commande OpenSSL