503 Dienst nicht verfügbar – SSL-Handshake-Fehler

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Symptom

Die Clientanwendung erhält als Antwort auf API-Aufrufe den HTTP-Statuscode 503 Service Unavailable mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed.

Fehlermeldung

Die Clientanwendung ruft den folgenden Antwortcode ab:

HTTP/1.1 503 Service Unavailable

Außerdem wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Mögliche Ursachen

Der Statuscode 503 Service Unavailable mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed kann aus verschiedenen Gründen aufgrund eines Fehlers beim SSL-Handshake zwischen dem Message Processor von Apigee Edge und dem Back-End-Server auftreten. Die Fehlermeldung im faultstring weist in der Regel auf eine mögliche allgemeine Ursache hin, die zu diesem Fehler geführt hat.

Abhängig von der in faultstring enthaltenen Fehlermeldung müssen Sie geeignete Techniken verwenden, um das Problem zu beheben. In diesem Playbook wird erläutert, wie Sie diesen Fehler beheben, wenn die Fehlermeldung 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 in faultstring angezeigt wird.

Dieser Fehler tritt während des SSL-Handshake-Vorgangs zwischen dem Message Processor von Apigee Edge und dem Back-End-Server auf:

  • Wenn der truststore des Message Processor von Apigee Edge:
    • enthält eine Zertifikatskette, die nicht mit der vollständigen Zertifikatskette des Back-End-Servers übereinstimmt ODER
    • Enthält nicht die vollständige Zertifikatskette des Back-End-Servers
  • Wenn die Zertifikatskette vom Back-End-Server angezeigt wird:
    • Enthält den Fully Qualified Domain Name (FQDN), der nicht mit dem im Zielendpunkt angegebenen Hostnamen übereinstimmt
    • Enthält eine falsche oder unvollständige Zertifikatskette

Mögliche Ursachen:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Falsches/unvollständiges Zertifikat oder falsche Zertifikatskette im Truststore des Message Processor Das Zertifikat und/oder dessen Kette, das im Truststore des Message Processor von Apigee Edge gespeichert ist, stimmt nicht mit der Zertifikatskette des Back-End-Servers überein oder enthält nicht die vollständige Zertifikatskette des Back-End-Servers. Nutzer von Edge Private und Public Cloud
Der FQDN im Zertifikat des Back-End-Servers stimmt nicht mit dem Hostnamen im Zielendpunkt überein Das vom Back-End-Server bereitgestellte Zertifikat enthält einen FQDN, der nicht mit dem im Zielendpunkt angegebenen Hostnamen übereinstimmt. Nutzer von Edge Private und Public Cloud
Das Zertifikat oder die Zertifikatskette wurde vom Back-End-Server falsch/unvollständig angezeigt Die vom Back-End-Server dargestellte Zertifikatskette ist entweder falsch oder unvollständig. Nutzer von Edge Private und Public Cloud

Allgemeine Diagnoseschritte

Verwenden Sie eines der folgenden Tools oder Methoden, um diesen Fehler zu diagnostizieren:

API-Monitoring

Prozedur 1: API-Monitoring verwenden

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

  1. Melden Sie sich in der Apigee Edge-UI als Nutzer mit einer entsprechenden Rolle an.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Rufen Sie die Seite Analysieren > API-Überwachung > Untersuchen auf.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Stellen Sie den Fehlercode der Zeit gegenüber.

  6. Wählen Sie eine Zelle mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed aus, wie unten dargestellt:

    ( größeres Bild ansehen)

  7. Informationen zum Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed werden wie unten dargestellt angezeigt:

    ( größeres Bild ansehen)

  8. Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.

    ( größeres Bild ansehen)

  9. Notieren Sie sich im Fenster Logs die folgenden Details:
    • Nachrichten-ID der Anfrage
    • Statuscode: 503
    • Fehlerquelle: target
    • Fehlercode: messaging.adaptors.http.flow.SslHandshakeFailed

Trace

Verfahren 2: Trace-Tool verwenden

So diagnostizieren Sie den Fehler mit dem Trace-Tool:

  1. Aktivieren Sie die Trace-Sitzung und entweder
    • Warten Sie, bis der Fehler 503 Service Unavailable mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed auftritt, oder
    • Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um das Problem zu reproduzieren. 503 Service Unavailable
  2. Achten Sie darauf, dass Show all FlowInfos aktiviert ist:

  3. Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
  4. Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
  5. Der Fehler tritt in der Regel nach der Phase Zielanfragefluss gestartet auf, wie unten dargestellt:

    ( größeres Bild ansehen)

  6. Notieren Sie sich die folgenden Werte aus dem Trace:
    • Fehler: 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
    • Der Wert des Fehlers 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 zeigt an, dass der SSL-Handshake fehlgeschlagen ist, da der Message Processor von Apigee Edge das Zertifikat des Back-End-Servers nicht validieren konnte.
  7. Gehen Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
  8. Scrollen Sie nach unten zum Abschnitt Phase Details Error Headers und bestimmen Sie die Werte für X-Apigee-Fehler-Code, X-Apigee-Fehler-Quelle und X-Apigee-Message-ID wie unten dargestellt:

    ( größeres Bild ansehen)

  9. Beachten Sie die Werte von X-Apigee-fault-code, X-Apigee-fault-code und X-Apigee-fault-code:
  10. Fehlerheader Wert
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Verfahren 3: NGINX-Zugriffslogs verwenden

So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:

  1. Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs die wichtigsten Informationen zu HTTP-503 Service Unavailable ermitteln.
  2. Prüfen Sie die NGINX-Zugriffslogs:

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

  3. Prüfen Sie, ob während eines bestimmten Zeitraums (wenn das Problem in der Vergangenheit aufgetreten ist) 503-Fehler mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed aufgetreten sind oder ob es immer noch Anfragen mit 503 gibt, die fehlschlagen.
  4. Wenn Sie 503-Fehler mit dem X-Apigee-fault-code finden, der dem Wert von X-Apigee-fault-code entspricht, bestimmen Sie den Wert von X-Apigee-fault-code.

    Beispiel für einen 503-Fehler aus dem NGINX-Zugriffslog:

    ( größeres Bild ansehen)

    Der obige Beispieleintrag aus dem NGINX-Zugriffslog enthält die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-code :

    Header Wert
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Message Processor-Protokolle

Verfahren Nr. 4: Nachrichtenprozessorprotokolle verwenden

  1. Bestimmen Sie die Nachrichten-ID einer der fehlgeschlagenen Anfragen mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Suchen Sie im Message Processor-Log (/opt/apigee/var/log/edge-message-processor/logs/system.log) nach der spezifischen Anfragenachrichten-ID. Möglicherweise wird der folgende Fehler angezeigt:

    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
    

    Der obige Fehler zeigt an, dass der SSL-Handshake zwischen dem Nachrichtenprozessor und dem Back-End-Server fehlgeschlagen ist.

    Darauf folgt eine Ausnahme mit einem detaillierten Stacktrace, wie unten dargestellt:

    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>
      

    Beachten Sie, dass der Handshake aus folgenden Gründen fehlschlägt:

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Dies weist darauf hin, dass der SSL-Handshake fehlgeschlagen ist, da der Message Processor von Apigee Edge das Zertifikat des Back-End-Servers nicht validieren konnte.

Ursache: Falsches/unvollständiges Zertifikat oder Zertifikatskette im Truststore des Message Processor

Diagnose

  1. Bestimmen Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API-Monitoring, Trace-Tool oder NGINX-Zugriffslogs, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Wenn der Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed lautet, ermitteln Sie die Fehlermeldung mit einer der folgenden Methoden:
    • Suchen Sie mit dem Trace-Tool nach der Datei error.cause, wie unter Allgemeine Diagnoseschritte erläutert.
    • Ermitteln Sie die Ausnahme mithilfe von Message Processor-Protokollen, wie unter Allgemeine Diagnoseschritte erläutert.
    • Suchen Sie die faultstring in der Fehlerantwort auf Ihren API-Aufruf, wie unter Fehlermeldung dargestellt.
  3. Wenn die Fehlermeldung sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" lautet, bedeutet dies, dass der SSL-Handshake fehlgeschlagen ist, da der Message Processor von Apigee Edge das Zertifikat des Back-End-Servers nicht validieren konnte.

Sie können dieses Problem in zwei Phasen beheben:

  1. Phase 1:Zertifikatskette des Back-End-Servers ermitteln
  2. Phase 2: Vergleichen Sie die im Truststore des Message Processor gespeicherte Zertifikatskette.

Phase 1

Phase 1: Zertifikatskette des Back-End-Servers ermitteln

Verwenden Sie eine der folgenden Methoden, um die Zertifikatskette des Back-End-Servers zu ermitteln:

openssl

Führen Sie den Befehl openssl für den Hostnamen des Back-End-Servers so aus:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

Notieren Sie sich die Zertifikatskette aus der Ausgabe des obigen Befehls:

Beispiel für die Zertifikatskette des Back-End-Servers aus der Ausgabe des Befehls „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

  1. Wenn Sie ein Nutzer der öffentlichen Cloud sind, erfassen Sie die TCP/IP-Pakete auf dem Back-End-Server.
  2. Wenn Sie ein Private Cloud-Nutzer sind, können Sie die TCP/IP-Pakete auf dem Back-End-Server oder Message Processor erfassen. Sie sollten sie vorzugsweise auf dem Back-End-Server erfassen, während die Pakete auf dem Back-End-Server entschlüsselt werden.
  3. Verwenden Sie den Befehl tcpdump, um TCP/IP-Pakete zu erfassen:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Analysieren Sie die TCP/IP-Pakete mit dem Wireshark-Tool oder einem anderen Ihnen bekannten Tool.

    Beispielanalyse von tcpdump

    ( größeres Bild ansehen)

    • Paket 43: Der Message Processor (Quelle) hat eine Client Hello-Nachricht an den Back-End-Server (Destination) gesendet.
    • Paket 44: Der Back-End-Server bestätigt den Empfang der Client Hello-Nachricht vom Message Processor.
    • Paket 45: Der Back-End-Server sendet die Server Hello-Nachricht zusammen mit dem Zertifikat.
    • Paket 46: Der Nachrichtenprozessor bestätigt den Empfang der Server Hello-Nachricht und des Zertifikats.
    • Paket Nr. 47: Der Nachrichtenprozessor sendet eine Nachricht vom Typ FIN, ACK, gefolgt von RST, ACK in Paket Nr. 48.

      Dies weist darauf hin, dass die Validierung des Back-End-Serverzertifikats durch den Message Processor fehlgeschlagen ist. Dies liegt daran, dass der Message Processor kein Zertifikat hat, das mit dem Zertifikat des Back-End-Servers übereinstimmt, oder dem Zertifikat des Back-End-Servers die im Truststore (Message Processor) verfügbaren Zertifikate nicht anvertrauen kann.

    • Sie können zurückgehen und Paket Nr. 45 überprüfen und die vom Back-End-Server gesendete Zertifikatskette ermitteln

      ( größeres Bild ansehen)

    • In diesem Beispiel können Sie sehen, dass der Server ein untergeordnetes Zertifikat mit common name (CN) = mocktarget.apigee.net, gefolgt von einem Zwischenzertifikat mit CN= GTS CA 1D4 und einem Root-Zertifikat mit CN = GTX Root R1, gesendet hat.

    Wenn die Zertifizierungsprüfung des Servers fehlgeschlagen ist, fahren Sie mit Phase 2: Das Zertifikat des Back-End-Servers und die im Truststore des Message Processor gespeicherten Zertifikate vergleichen fort.

Phase 2

Phase 2: Vergleichen Sie das Zertifikat des Back-End-Servers und die Zertifikate, die im Truststore des Message Processor gespeichert sind

  1. Bestimmen Sie die Zertifikatskette des Back-End-Servers.
  2. Führen Sie die folgenden Schritte aus, um das im Truststore des Message Processor gespeicherte Zertifikat zu ermitteln:
    1. Rufen Sie den Truststore-Referenznamen aus dem Element TrustStore im Abschnitt SSLInfo des TargetEndpoint ab.

      Sehen wir uns ein Beispiel für einen SSLInfo-Abschnitt in einer TargetEndpoint-Konfiguration an:

      <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. Im obigen Beispiel lautet der Referenzname TrustStore myCompanyTruststoreRef.
    3. Wählen Sie in der Edge-Benutzeroberfläche Environments > References (Umgebungen > Referenzen) aus. Notieren Sie sich den Namen in der Spalte Referenz für die spezifische Truststore-Referenz. Dies ist der Name Ihres Truststores.

      ( größeres Bild ansehen)

    4. Im obigen Beispiel lautet der Truststore-Name:

      myCompanyTruststoreRef myCompanyTruststore

  3. Rufen Sie die im vorherigen Schritt im Truststore gespeicherten Zertifikate mit den folgenden APIs ab:

    1. Alle Zertifikate für einen Schlüsselspeicher oder Truststore abrufen Diese API listet alle Zertifikate im jeweiligen Truststore auf.

      Public Cloud-Nutzer:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Private Cloud-Nutzer:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Wo:

      • ORGANIZATION_NAME ist der Name der Organisation.
      • ENVIRONMENT_NAME ist der Name der Umgebung.
      • KEYSTORE_NAME ist der Name des Schlüsselspeichers.
      • $TOKEN ist auf Ihr OAuth 2.0-Zugriffstoken festgelegt, wie unter OAuth 2.0-Zugriffstoken abrufen beschrieben
      • Die in diesem Beispiel verwendeten curl-Optionen werden unter curl verwenden beschrieben.

      Beispielausgabe:

      Die Zertifikate aus dem Beispiel-Truststore myCompanyTruststore lauten:

      [
        "serverCert"
      ]
      

    2. Zertifikatdetails für ein bestimmtes Zertifikat aus einem Schlüsselspeicher oder Truststore abrufen Diese API gibt die Informationen zu einem bestimmten Zertifikat im jeweiligen Truststore zurück.

      Public Cloud-Nutzer:

      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"
      

      Private Cloud-Nutzer

      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"
      

      Wo:

      • ORGANIZATION_NAME ist der Name der Organisation.
      • ENVIRONMENT_NAME ist der Name der Umgebung.
      • KEYSTORE_NAME ist der Name des Schlüsselspeichers.
      • CERT_NAME ist der Name des Zertifikats
      • $TOKEN ist auf Ihr OAuth 2.0-Zugriffstoken festgelegt, wie unter OAuth 2.0-Zugriffstoken abrufen beschrieben
      • Die in diesem Beispiel verwendeten curl-Optionen werden unter curl verwenden beschrieben.

      Beispielausgabe

      In den Details von serverCert sind Subjekt und Aussteller so zu sehen:

      Blatt-/Entitätszertifikat:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      Zwischenzertifikat:

      "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. Prüfen Sie, ob das in Schritt 1 erhaltene Serverzertifikat und das im Truststore aus Schritt 3 gespeicherte Zertifikat übereinstimmen. Wenn sie nicht übereinstimmen, ist das der Grund für das Problem.

    Betrachten wir im obigen Beispiel jeweils nur ein Zertifikat:

    1. Blatt-Zertifikat:

      Über den Back-End-Server:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      

      Aus dem Truststore von Message Processor (Client):

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      

      Das im Truststore gespeicherte untergeordnete Zertifikat stimmt mit dem des Back-End-Servers überein.

    2. Zwischenzertifikat:

      Über den Back-End-Server:

      s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      Aus dem Truststore von Message Processor (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",
      

      Das im Truststore gespeicherte Zwischenzertifikat entspricht dem des Back-End-Servers.

    3. Root-Zertifikat:

      Über den Back-End-Server:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      

      Das Root-Zertifikat fehlt im Truststore des Message Processor vollständig.

    4. Da das Root-Zertifikat im Truststore fehlt, löst der Message Processor die folgende Ausnahme aus:

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
      

      und gibt 503 Service Unavailable mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed an die Clientanwendungen zurück.

Auflösung

  1. Achten Sie darauf, dass Sie die richtige und vollständige Zertifikatskette des Back-End-Servers haben.
  2. Wenn Sie ein Public Cloud-Nutzer sind, folgen Sie der Anleitung unter TLS-Zertifikat für die Cloud aktualisieren, um das Zertifikat auf den Message Processor-Truststore von Apigee Edge zu aktualisieren.
  3. Wenn Sie ein Private Cloud-Nutzer sind, folgen Sie der Anleitung unter TLS-Zertifikat für die Private Cloud aktualisieren, um das Zertifikat auf den Message Processor-Truststore von Apigee Edge zu aktualisieren.

Ursache: Der FQDN im Zertifikat des Back-End-Servers stimmt nicht mit dem Hostnamen im Zielendpunkt überein

Wenn der Back-End-Server eine Zertifikatskette mit FQDN enthält, der nicht mit dem im Zielendpunkt angegebenen Hostnamen übereinstimmt, gibt der Nachrichtenprozess von Apigee Edge den Fehler 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 zurück.

Diagnose

  1. Prüfen Sie den spezifischen Zielendpunkt im API-Proxy, in dem Sie diesen Fehler beobachten, und notieren Sie sich den Hostnamen des Back-End-Servers:

    Beispiel für TargetEndpoint:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.company.com/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

    Im obigen Beispiel lautet der Hostname des Back-End-Servers backend.company.com.

  2. Bestimmen Sie den FQDN im Zertifikat des Back-End-Servers mit dem Befehl openssl, wie unten gezeigt:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    Beispiel:

    openssl s_client -connect backend.company.com:443
    

    Sehen Sie sich den Abschnitt Certificate chain an und notieren Sie sich den FQDN als Teil des CN im Betreff des untergeordneten Zertifikats.

    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
    

    Im obigen Beispiel lautet der FQDN des Back-End-Servers backend.apigee.net.

  3. Wenn der Hostname des Back-End-Servers, der in Schritt 1 abgerufen wurde, und der in Schritt 2 abgerufene FQDN nicht übereinstimmt, ist das die Ursache des Fehlers.
  4. Im oben beschriebenen Beispiel lautet der Hostname im Zielendpunkt backend.company.com. Der FQDN-Name im Zertifikat des Back-End-Servers lautet jedoch backend.apigee.net. Da sie nicht übereinstimmen, erhalten Sie diesen Fehler.

Auflösung

Sie haben folgende Möglichkeiten, dieses Problem zu beheben:

Richtiger FQDN

Aktualisieren Sie den Schlüsselspeicher des Back-End-Servers mit dem richtigen FQDN sowie einer gültigen und vollständigen Zertifikatskette:

  1. Wenn Sie kein Zertifikat eines Back-End-Servers mit dem richtigen FQDN haben, besorgen Sie das richtige Zertifikat von einer entsprechenden Zertifizierungsstelle (Zertifizierungsstelle).
  2. Prüfen Sie, ob Sie eine gültige und vollständige Zertifikatskette des Back-End-Servers haben.

  3. Sobald Sie die gültige und vollständige Zertifikatskette mit dem richtigen FQDN des Back-End-Servers im untergeordneten oder Entitätszertifikat haben, das mit dem im Zielendpunkt angegebenen Hostnamen identisch ist, aktualisieren Sie den Schlüsselspeicher des Back-Ends mit der vollständigen Zertifikatskette.

Richtiger Back-End-Server

Aktualisieren Sie den Zielendpunkt mit dem korrekten Hostnamen des Back-End-Servers:

  1. Wenn der Hostname im Zielendpunkt falsch angegeben wurde, aktualisieren Sie den Zielendpunkt so, dass er den richtigen Hostnamen enthält, der mit dem FQDN im Zertifikat des Back-End-Servers übereinstimmt.
  2. Speichern Sie die Änderungen am API-Proxy.

    Wenn im oben beschriebenen Beispiel der Hostname des Back-End-Servers falsch angegeben wurde, können Sie das Problem beheben, indem Sie den FQDN aus dem Zertifikat des Back-End-Servers (backend.apigee.net) verwenden:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>
    

Ursache: Falsches/unvollständiges Zertifikat oder Zertifikatskette vom Back-End-Server

Diagnose

  1. Rufen Sie die Zertifikatskette des Back-End-Servers ab. Führen Sie dazu den Befehl openssl für den Hostnamen des Back-End-Servers so aus:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Notieren Sie sich die Certificate chain aus der Ausgabe des obigen Befehls.

    Beispiel für die Zertifikatskette des Back-End-Servers aus der Ausgabe des Befehls „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. Prüfen Sie, ob Sie die richtige und vollständige Zertifikatskette haben, wie unter Zertifikatskette validieren erläutert.
  3. Wenn Sie keine gültige und vollständige Zertifikatskette für den Back-End-Server haben, ist das die Ursache für das Problem.

    In der oben gezeigten Zertifikatskette des Back-End-Beispielservers fehlt das Root-Zertifikat. Daher wird dieser Fehler angezeigt.

Auflösung

Aktualisieren Sie den Schlüsselspeicher des Back-End-Servers mit einer gültigen und vollständigen Zertifikatskette:

  1. Prüfen, ob die Zertifikatskette des Back-End-Servers gültig und vollständig ist

  2. Aktualisieren Sie die gültige und vollständige Zertifikatskette im Schlüsselspeicher des Back-End-Servers.

Wenn das Problem weiterhin besteht, fahren Sie mit Diagnoseinformationen erforderlich fort.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der obigen Anleitung weiterhin besteht, stellen Sie die folgenden Diagnoseinformationen zusammen und wenden Sie sich an den Apigee Edge-Support:

  • Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an:
    • Name der Organisation
    • Name der Umgebung
    • API-Proxy-Name
    • Führen Sie den Befehl curl aus, um den Fehler zu reproduzieren
    • Ablaufverfolgungsdatei mit dem Fehler
    • Ausgabe des Befehls openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Auf dem Back-End-Server erfasste TCP/IP-Pakete
  • Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an:

Verweise