503 Service indisponible – Échec de handshake SSL

<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
<ph type="x-smartling-placeholder">

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:

  1. <ph type="x-smartling-placeholder"></ph> Connectez-vous à l'interface utilisateur d'Apigee Edge en tant qu'utilisateur disposant d'un rôle approprié.
  2. Accédez à l'organisation dans laquelle vous souhaitez examiner le problème.

  3. Accédez à Analyser > Surveillance des API > Examiner.
  4. Sélectionnez la période spécifique au cours de laquelle vous avez observé les erreurs.
  5. Représentez le code d'erreur par rapport à l'heure.

    <ph type="x-smartling-placeholder">
  6. Sélectionnez une cellule contenant le code d'erreur messaging.adaptors.http.flow.SslHandshakeFailed tel qu'illustré ci-dessous:

    ( Agrandir l'image)

  7. Informations sur le code d'erreur messaging.adaptors.http.flow.SslHandshakeFailed s'affiche sous la forme comme indiqué ci-dessous:

    ( Agrandir l'image)

  8. Cliquez sur Afficher les journaux et développez la ligne correspondant à la requête ayant échoué.

    ( Agrandir l'image)

  9. 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:

  1. Activez la session de trace, puis <ph type="x-smartling-placeholder">
      </ph>
    • Attendez l'erreur 503 Service Unavailable avec le code d'erreur messaging.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
  2. Assurez-vous que l'option Show all FlowInfos (Afficher toutes les infos FlowInfos) est activée:

  3. Sélectionnez l'une des requêtes ayant échoué et examinez la trace.
  4. Parcourez les différentes phases de la trace et localisez l'origine de l'échec.
  5. 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:

    ( Agrandir l'image)

  6. 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.
  7. Accédez à la phase AX (Données analytiques enregistrées) dans la trace, puis cliquez dessus.
  8. 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:

    ( Agrandir l'image)

  9. Notez les valeurs de X-Apigee-fault-code, X-Apigee-fault-source, et X-Apigee-Message-ID:
  10. 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:

  1. 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.
  2. Vérifiez les journaux d'accès NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

    <ph type="x-smartling-placeholder">
  3. Effectuez une recherche pour voir s'il existe des erreurs 503 avec un code d'erreur messaging.adaptors.http.flow.SslHandshakeFailed pendant une durée spécifique (si le problème est survenu pendant ou si des requêtes échouent toujours avec 503.
  4. Si vous trouvez des erreurs 503 avec la correspondance X-Apigee-fault-code la valeur de messaging.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:

    ( Agrandir l'image)

    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">
  1. 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.
  2. 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 problem
    

    L'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

  1. 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.
  2. 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:
  3. 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:

  1. Phase 1:Déterminer la chaîne de certificats du serveur backend
  2. 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">
  1. Si vous êtes un utilisateur de cloud public, capturez les paquets TCP/IP sur le à votre serveur backend.
  2. 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.
  3. 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">
  4. Analyser les paquets TCP/IP à l'aide du l'outil Wireshark ou un outil similaire à celui que vous connaissez.

    Exemple d'analyse de tcpdump

    ( Agrandir l'image)

    • 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 de RST, 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

      ( Agrandir l'image)

    • 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 avec CN= GTS CA 1D4 et certificat racine avec CN = 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.

Phase 2

Phase 2: Comparez le certificat du serveur backend avec les certificats stockés dans le Magasin de confiance du processeur de messages

  1. Déterminez la chaîne de certificats du serveur backend.
  2. Déterminez le certificat stocké dans le Truststore du processeur de messages en utilisant procédez comme suit: <ph type="x-smartling-placeholder">
      </ph>
    1. Obtenez le nom de référence du truststore à partir de l'élément TrustStore dans la section SSLInfo du TargetEndpoint.

      Examinons un exemple de section SSLInfo dans une TargetEndpoint. 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>
      
    2. Dans l'exemple ci-dessus, le nom de référence TrustStore est myCompanyTruststoreRef
    3. 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 ».

      ( Agrandir l'image)

    4. Dans l'exemple ci-dessus, le nom du truststore est le suivant:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Obtenir les certificats stockés dans le truststore (déterminé à l'étape précédente) à l'aide des API suivantes:

    1. <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"
      ]
      

    2. <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",
      
  4. 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:

    1. 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.

    2. 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.

    3. 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.

    4. 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'erreur messaging.adaptors.http.flow.SslHandshakeFailed au client applications.

<ph type="x-smartling-placeholder">

Solution

  1. Assurez-vous que vous disposez de la chaîne de certificats appropriée et complète du serveur backend.
  2. 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.
  3. 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

  1. 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.

  2. 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 R1
    

    Dans l'exemple ci-dessus, le nom de domaine complet du serveur backend est backend.apigee.net.

  3. 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.
  4. 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 est backend.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:

  1. 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.
  2. Vérifiez que vous disposez d'une chaîne de certificats valide et complète.

    <ph type="x-smartling-placeholder">
  3. 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.
<ph type="x-smartling-placeholder">

Serveur backend approprié

Mettez à jour le point de terminaison cible avec le nom d'hôte du serveur backend approprié:

  1. 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.
  2. 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

  1. 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
       
  2. 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
  3. 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:

  1. <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">
  2. Mettez à jour la chaîne de certificats valide et complète dans le keystore du serveur backend.
<ph type="x-smartling-placeholder">

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">

Références