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

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Symptom

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

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

Sie erhalten möglicherweise den Statuscode 503 Service Unavailable mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed aufgrund eines Fehlers während der SSL-Übertragung Handshake-Prozess zwischen dem Message Processor von Apigee Edge und dem Backend-Server für eine Reihe von Gründe. Die Fehlermeldung im faultstring zeigt normalerweise an, ist eine mögliche allgemeine Ursache, die zu diesem Fehler geführt hat.

Je nach Fehlermeldung in faultstring müssen Sie den Befehl geeignete Techniken zur Behebung des Problems anwenden. In diesem Playbook wird erläutert, wie Sie diesen Fehler, 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-Handshakes zwischen dem Message Processor von Apigee Edge und Back-End-Server:

  • Wenn der Truststore des Message Processor von Apigee Edge: <ph type="x-smartling-placeholder">
      </ph>
    • Enthält eine Zertifikatskette, die nicht mit der vollständigen Zertifikatkette des Backend-Servers übereinstimmt Zertifikatskette ODER
    • Enthält nicht die vollständige Zertifikatskette des Backend-Servers
  • Wenn die vom Back-End-Server bereitgestellte Zertifikatskette Folgendes zutrifft: <ph type="x-smartling-placeholder">
      </ph>
    • Enthält Voll qualifizierter Domainname (Fully Qualified Domain Name, FQDN), der nicht mit dem im den Zielendpunkt
    • Enthält eine falsche oder unvollständige Zertifikatskette
<ph type="x-smartling-placeholder">

Das kann folgende Ursachen haben:

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Das Zertifikat oder die Zertifikatskette im Truststore des Message Processor ist falsch oder unvollständig Das Zertifikat und/oder seine Kette, die im Truststore des Message Processor von Apigee Edge gespeichert ist, stimmt nicht mit der Zertifikatskette des Backend-Servers überein oder enthält nicht die vollständige Zertifikatskette des Backend-Servers. Private und öffentliche Edge-Cloud-Nutzer
Der FQDN im Zertifikat des Backend-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. Private und öffentliche Edge-Cloud-Nutzer
Das Zertifikat oder die Zertifikatskette wird vom Backend-Server falsch/unvollständig bereitgestellt Die vom Back-End-Server bereitgestellte Zertifikatskette ist entweder falsch oder unvollständig. Private und öffentliche Edge-Cloud-Nutzer

Allgemeine Diagnoseschritte

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

API-Monitoring

Verfahren 1: API-Monitoring verwenden

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

So diagnostizieren Sie den Fehler mithilfe von API-Monitoring:

  1. <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
  2. Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.

  3. Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
  4. Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
  5. Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.

    <ph type="x-smartling-placeholder">
  6. Wähle eine Zelle mit dem Fehlercode aus messaging.adaptors.http.flow.SslHandshakeFailed wie gezeigt unten:

    ( Größeres Bild ansehen)

  7. Informationen über den Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed wird angezeigt als (siehe unten):

    ( 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. Im Fenster Logs werden die folgenden Details angezeigt: <ph type="x-smartling-placeholder">
      </ph>
    • Nachrichten-ID der Anfrage
    • Statuscode: 503
    • Fehlerquelle: target
    • Fehlercode: messaging.adaptors.http.flow.SslHandshakeFailed

Trace

Verfahren 2: Trace-Tool verwenden

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

So diagnostizieren Sie den Fehler mit dem Trace-Tool:

  1. Aktivieren Sie die Trace-Sitzung und entweder <ph type="x-smartling-placeholder">
      </ph>
    • Auf den Fehler 503 Service Unavailable mit Fehlercode warten messaging.adaptors.http.flow.SslHandshakeFailed oder
    • Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um es zu reproduzieren. 503 Service Unavailable
  2. Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) 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 wird in der Regel nach der Phase Zielanfragefluss gestartet angezeigt. wie unten dargestellt:

    ( Größeres Bild ansehen)

  6. Notieren Sie sich die folgenden Werte aus dem Trace: <ph type="x-smartling-placeholder">
      </ph>
    • 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 gibt an, dass der SSL-Handshake fehlgeschlagen ist, da der Message Processor von Apigee Edge die Zertifikat.
  7. Navigieren 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 Werte von X-Apigee-fault-code und X-Apigee-fault-code und X-Apigee-Message-ID wie unten gezeigt:

    ( Größeres Bild ansehen)

  9. Notieren Sie sich die Werte von X-Apigee-fault-code und X-Apigee-fault-code. und X-Apigee-Message-ID:
  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

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

So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:

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

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

    <ph type="x-smartling-placeholder">
  3. Nach 503-Fehlern mit Fehlercode suchen messaging.adaptors.http.flow.SslHandshakeFailed während eines bestimmten Zeitraums (wenn das Problem im oder Anfragen mit 503 fehlschlagen.
  4. Wenn Sie 503-Fehler mit dem X-Apigee-fault-code finden Wert von messaging.adaptors.http.flow.SslHandshakeFailed, dann Bestimmen Sie den Wert von X-Apigee-fault-source..

    Beispielfehler 503 aus dem NGINX-Zugriffsprotokoll:

    ( Größeres Bild ansehen)

    Der obige Beispieleintrag aus dem NGINX-Zugriffsprotokoll 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-Logs

Verfahren 4: Nachrichtenprozessorlogs verwenden

<ph type="x-smartling-placeholder">
  1. Ermitteln Sie die Nachrichten-ID einer der fehlgeschlagenen Anfragen mithilfe des API-Monitorings, des Trace-Tools, oder NGINX-Zugriffs-Logs, wie unter Allgemeine Diagnoseschritte erläutert.
  2. Suchen Sie im Message Processor-Protokoll nach der spezifischen ID der Anfragenachricht. (/opt/apigee/var/log/edge-message-processor/logs/system.log) Möglicherweise stellen Sie fest, folgenden Fehler:

    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 Message Processor fehlgeschlagen ist. und den Back-End-Server.

    Darauf folgt eine Ausnahme mit einem detaillierten Stacktrace:

    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-Fehler folgende Ursachen hat:

    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 Backend-Servers kann nicht validiert werden.

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

Diagnose

  1. Ermitteln Sie den Fehlercode bzw. die Fehlerquelle für den mit der API beobachteten Fehler. Monitoring-, Trace-Tool- oder NGINX-Zugriffslogs, wie in Allgemeine Diagnoseschritte durchführen.
  2. Wenn der Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed ist, dann: Ermitteln Sie die Fehlermeldung mithilfe einer der folgenden Methoden:
  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, da der Message Processor von Apigee Edge die Zertifikat.

Sie können dieses Problem in zwei Phasen beheben:

  1. Phase 1: Bestimmen der Zertifikatskette des Back-End-Servers
  2. Phase 2: Vergleichen der Zertifikatskette, die im Truststore des Message Processor gespeichert ist

Phase 1

Phase 1: Bestimmen der Zertifikatskette des Back-End-Servers

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

openssl

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

openssl-Befehl auf dem Host des Back-End-Servers ausführen Name so:

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 Backend-Servers aus der Ausgabe des openssl-Befehls:

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. Wenn Sie Nutzer einer öffentlichen Cloud sind, erfassen Sie die TCP/IP-Pakete auf der Back-End-Server.
  2. Wenn Sie ein Private Cloud-Nutzer sind, können Sie die TCP/IP-Adresse auf dem Back-End-Server oder dem Message Processor. Nehmen Sie sie am besten da die Pakete auf dem Back-End-Server entschlüsselt werden.
  3. Verwenden Sie Folgendes: <ph type="x-smartling-placeholder"></ph> tcpdump, um TCP/IP-Pakete zu erfassen:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
    <ph type="x-smartling-placeholder">
  4. Analysieren Sie die TCP/IP-Pakete mithilfe der Wireshark-Tool oder mit dem Sie vertraut sind.

    Beispielanalyse von tcpdump

    ( Größeres Bild ansehen)

    • Paket 43: Der Message Processor (Quelle) hat eine Client Hello-Nachricht an den Back-End-Server (Ziel).
    • Paket 44:Der Back-End-Server bestätigt den Empfang der Client Hello-Nachricht vom Message Processor.
    • Paket 45: Der Backend-Server sendet das Server Hello. und das zugehörige Zertifikat an.
    • Paket 46: Der Message Processor bestätigt den Empfang der Server Hello und das Zertifikat.
    • Paket 47: Der Message Processor sendet eine FIN, ACK. gefolgt von RST, ACK in Paket 48.

      Dies gibt an, dass die Zertifikatvalidierung des Back-End-Servers durch die Nachrichtenverarbeitung fehlgeschlagen. Das liegt daran, dass der Message Processor Jedes Zertifikat, das mit dem Zertifikat des Backend-Servers übereinstimmt oder nicht vertrauenswürdig ist das Zertifikat des Backend-Servers mit den Zertifikaten, die in der Truststore des Nachrichtenverarbeiters.

    • Sie können Paket 45 noch einmal durchgehen und das Zertifikat bestimmen. vom Back-End-Server gesendete Kette

      ( Größeres Bild ansehen)

    • In diesem Beispiel hat der Server ein untergeordnetes Zertifikat durch den common name (CN) = mocktarget.apigee.net, gefolgt von einem Zwischenzertifikat mit CN= GTS CA 1D4 und Stammzertifikat mit CN = GTX Root R1.

    Wenn die Zertifizierung des Servers fehlgeschlagen ist, Gehen Sie zu Phase 2: Vergleichen des Zertifikats des Backend-Servers und Zertifikate, die im Truststore des Message Processor gespeichert sind.

Phase 2

Phase 2: Vergleichen Sie das Zertifikat des Backend-Servers und die Zertifikate, die im Truststore des Nachrichtenverarbeiters

  1. Bestimmen Sie die Zertifikatskette des Back-End-Servers.
  2. Ermitteln Sie das im Truststore des Message Processor gespeicherte Zertifikat mithilfe von führen Sie die folgenden Schritte aus: <ph type="x-smartling-placeholder">
      </ph>
    1. Rufen Sie den Truststore-Referenznamen aus dem Element TrustStore ab. im Abschnitt SSLInfo der Datei TargetEndpoint.

      Sehen wir uns einen SSLInfo-Beispielabschnitt in einer TargetEndpoint an. Konfiguration:

      <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 Name der TrustStore-Referenz myCompanyTruststoreRef.
    3. Wählen Sie in der Edge-Benutzeroberfläche Environments > Referenzen. Notieren Sie sich den Namen in der Reference (Referenz) für die spezifische Truststore-Referenz. Dies ist Ihr Truststore-Name.

      ( Größeres Bild ansehen)

    4. Im obigen Beispiel lautet der Truststore-Name:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Die im Truststore gespeicherten Zertifikate abrufen (im vorherigen Schritt ermittelt) mithilfe der folgenden APIs:

    1. <ph type="x-smartling-placeholder"></ph> Alle Zertifikate für einen Schlüsselspeicher oder Truststore abrufen Diese API listet alle Zertifikate im jeweiligen Truststore.

      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 wie beschrieben auf Ihr OAuth 2.0-Zugriffstoken festgelegt: OAuth 2.0-Zugriffstoken abrufen
      • Die in diesem Beispiel verwendeten curl-Optionen werden unter Curl verwenden

      Beispielausgabe:

      Die Zertifikate aus dem Beispiel-Truststore myCompanyTruststore sind:

      [
        "serverCert"
      ]
      

    2. <ph type="x-smartling-placeholder"></ph> Zertifikatsdetails für das jeweilige Zertifikat aus einem Schlüsselspeicher oder Truststore abrufen Diese API gibt die Informationen zu einem bestimmten Zertifikat in der spezifischen Truststore.

      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 wie beschrieben auf Ihr OAuth 2.0-Zugriffstoken festgelegt: OAuth 2.0-Zugriffstoken abrufen
      • Die in diesem Beispiel verwendeten curl-Optionen werden unter Curl verwenden

      Beispielausgabe

      Details zu serverCert zeigen Thema und Aussteller so an:

      Blatt-/Rechtssubjektzertifikat:

      "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 Zertifikat die im Truststore gespeichert sind, den Sie in Schritt 3 abgerufen haben. Stimmen sie nicht überein, die Ursache des Problems ist.

    Sehen wir uns ausgehend vom obigen Beispiel jeweils nur ein Zertifikat an:

    1. Lehrbescheinigung:

      Vom Back-End-Server:

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

      Aus dem Truststore des Message Processor (Client):

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

      Das untergeordnete Zertifikat, das im Truststore gespeichert ist, stimmt mit dem Zertifikat des Back-Ends überein Server.

    2. Zwischenzertifikat:

      Vom 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 des 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 stimmt mit dem Zertifikat des Back-End-Server.

    3. Root-Zertifikat:

      Vom 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 Message Processor vollständig. Truststore.

    4. Da das Root-Zertifikat im Truststore fehlt, Message Processor löst 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 zurück. messaging.adaptors.http.flow.SslHandshakeFailed an den Kunden Anwendungen.

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

Auflösung

  1. Stelle sicher, dass du über die korrekte und vollständige Zertifikatskette des Back-End-Servers verfügst.
  2. Wenn Sie ein Public Cloud-Nutzer sind, folgen Sie der Anleitung unter <ph type="x-smartling-placeholder"></ph> Aktualisieren Sie ein TLS-Zertifikat für die Cloud, um das Zertifikat auf das von Apigee Edge Message Processor-Truststore.
  3. Wenn Sie ein Private Cloud-Nutzer sind, folgen Sie der Anleitung unter <ph type="x-smartling-placeholder"></ph> Aktualisieren Sie ein TLS-Zertifikat für die Private Cloud, um das Zertifikat auf Message Processor-Truststore von Apigee Edge.

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

Wenn der Backend-Server eine Zertifikatskette bereitstellt, die einen FQDN enthält, der nicht mit dem im Zielendpunkt angegeben ist, gibt der Message Process von Apigee Edge den Fehler zurück 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

Diagnose

  1. Untersuchen Sie den spezifischen Zielendpunkt im API-Proxy, in dem Sie dies beobachten. und notieren Sie sich den Hostnamen des Back-End-Servers:

    TargetEndpoint (Beispiel):

    <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 Backend-Servers backend.company.com.

  2. Bestimmen Sie den FQDN im Zertifikat des Backend-Servers mithilfe von openssl wie unten dargestellt:

    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 folgenden FQDN: Teil des CN im Subjekt 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 Backend-Servers backend.apigee.net.

  3. Wenn der Hostname des Backend-Servers aus Schritt 1 und der FQDN abgerufen wird, Schritt 2 nicht übereinstimmen, ist dies die Ursache des Fehlers.
  4. Im oben erläuterten Beispiel ist der Hostname im Zielendpunkt backend.company.com Der FQDN-Name im Zertifikat des Back-End-Servers ist backend.apigee.net. Da sie nicht übereinstimmen, erhalten Sie diese Fehlermeldung.

Auflösung

Sie können dieses Problem mit einer der folgenden Methoden beheben:

Richtiger FQDN

Schlüsselspeicher des Backend-Servers mit korrektem FQDN, gültigem und vollständigem Zertifikat aktualisieren Kette:

  1. Wenn Sie kein Zertifikat eines Backend-Servers mit dem richtigen FQDN haben, Fordern Sie dann das entsprechende Zertifikat von einer entsprechenden Zertifizierungsstelle an.
  2. Prüfen Sie, ob Sie gültige und vollständige Zertifikatskette des Back-End-Servers.

    <ph type="x-smartling-placeholder">
  3. Sobald Sie die gültige und vollständige Zertifikatskette mit dem richtigen FQDN der Backend-Server im Blatt- oder Entitätszertifikat, das mit dem Hostnamen identisch ist im Zielendpunkt angegeben ist, aktualisieren Sie den Keystore des Back-Ends mit der vollständige Zertifikatskette.
<ph type="x-smartling-placeholder">

Richtiger Backend-Server

Aktualisieren Sie den Zielendpunkt mit dem richtigen Hostnamen des Backend-Servers:

  1. Wenn der Hostname im Zielendpunkt falsch angegeben wurde, aktualisieren Sie den Zielendpunkt, damit dieser den richtigen Hostnamen hat, der mit dem FQDN im Back-End übereinstimmt des Serverzertifikats.
  2. Speichern Sie die Änderungen am API-Proxy.

    Wenn im oben beschriebenen Beispiel der Hostname des Back-End-Servers falsch war, können Sie das Problem mit dem FQDN aus dem Zertifikat des Back-End-Servers beheben. mit dem Wert backend.apigee.net:

    <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 falsche Zertifikatskette vom Backend-Server

Diagnose

  1. Rufen Sie die Zertifikatskette des Back-End-Servers mit dem Befehl openssl ab. den Hostnamen des Back-End-Servers so:
    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 Backend-Servers aus der Ausgabe des openssl-Befehls:

    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. Stellen Sie sicher, dass Sie die korrekte und vollständige Zertifikatskette haben, wie unter Zertifikatskette validieren
  3. Wenn Sie nicht über die gültige und vollständige Zertifikatskette für den Backend-Server verfügen, ist das die Ursache für dieses Problem.

    In der oben gezeigten Zertifikatskette des Back-End-Servers ist das Root-Zertifikat fehlen. Daher erhalten Sie diesen Fehler.

Auflösung

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

  1. <ph type="x-smartling-placeholder"></ph> Prüfen, ob die Zertifikatskette des Backend-Servers gültig und vollständig ist

    <ph type="x-smartling-placeholder">
  2. Aktualisieren Sie die gültige und vollständige Zertifikatskette im Schlüsselspeicher des Back-End-Servers.
<ph type="x-smartling-placeholder">

Wenn das Problem weiterhin besteht, gehen Sie zu . Diagnosedaten müssen erfasst werden.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem trotz Befolgung der obigen Anleitung weiterhin besteht, stellen Sie Folgendes zusammen: Diagnoseinformationen und wenden Sie sich an den Apigee Edge-Support:

  • Wenn Sie ein Public Cloud-Nutzer sind, geben Sie die folgenden Informationen an: <ph type="x-smartling-placeholder">
      </ph>
    • Name der Organisation
    • Name der Umgebung
    • API-Proxy-Name
    • Führen Sie den Befehl curl aus, um den Fehler zu reproduzieren.
    • Ablaufverfolgungsdatei mit Fehler
    • Ausgabe des Befehls openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Auf dem Backend-Server erfasste TCP/IP-Pakete
  • Wenn Sie ein Private Cloud-Nutzer sind, geben Sie die folgenden Informationen an: <ph type="x-smartling-placeholder">

Verweise