Sie lesen gerade die Dokumentation zu Apigee Edge.
Apigee X-Dokumentation aufrufen info
Symptom
Die Clientanwendung erhält den HTTP-Statuscode 503 Service Unavailable mit dem Fehlercode messaging.adaptors.http.flow.SslHandshakeFailed als Antwort auf API-Aufrufe.
Fehlermeldung
Die Clientanwendung erhält den folgenden Antwortcode:
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, wenn der SSL-Handshake-Prozess zwischen dem Message Processor von Apigee Edge und dem Backend-Server aus verschiedenen Gründen fehlschlägt. Die Fehlermeldung in faultstring weist in der Regel auf eine mögliche Ursache hin, die zu diesem Fehler geführt hat.
Je nach Fehlermeldung, die in faultstring angezeigt wird, müssen Sie geeignete Methoden zur Fehlerbehebung verwenden. In diesem Playbook wird beschrieben, wie Sie diesen Fehler beheben können, 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 der faultstring angezeigt wird.
Dieser Fehler tritt während des SSL-Handshake-Prozesses zwischen dem Message Processor von Apigee Edge und dem Backend-Server auf:
- Wenn der truststore des Message Processors von Apigee Edge:
- Eine Zertifikatskette enthält, die nicht mit der vollständigen Zertifikatskette des Backend-Servers übereinstimmt, ODER
- Nicht die vollständige Zertifikatskette des Backend-Servers enthält
- If the certificate chain presented by the backend server:
- Enthält einen vollständig qualifizierten Domainnamen (FQDN), der nicht mit dem im Zielendpunkt angegebenen Hostnamen übereinstimmt
- Enthält eine falsche oder unvollständige Zertifikatskette
Mögliche Ursachen für dieses Problem:
| Ursache | Beschreibung | Anleitungen zur Fehlerbehebung gelten für |
|---|---|---|
| Falsches/unvollständiges Zertifikat oder eine falsche/unvollständige Zertifikatskette im Truststore des Message Processor | Das im Truststore des Message Processors von Apigee Edge gespeicherte Zertifikat und/oder die zugehörige Kette stimmt nicht mit der Zertifikatskette des Backend-Servers überein oder enthält nicht die vollständige Zertifikatskette des Backend-Servers. | Nutzer von Edge Private und Public Cloud |
| FQDN im Zertifikat des Backend-Servers stimmt nicht mit dem Hostnamen im Zielendpunkt überein | Das vom Backend-Server präsentierte Zertifikat enthält einen FQDN, der nicht mit dem im Zielendpunkt angegebenen Hostnamen übereinstimmt. | Nutzer von Edge Private und Public Cloud |
| Falsches/unvollständiges Zertifikat oder falsche/unvollständige Zertifikatskette, die vom Backend-Server präsentiert wird | Die vom Backend-Server präsentierte Zertifikatkette ist entweder falsch oder unvollständig. | Nutzer von Edge Private und Public Cloud |
Allgemeine Diagnoseschritte
Verwenden Sie eines der folgenden Tools oder Verfahren, um diesen Fehler zu diagnostizieren:
API-Monitoring
Methode 1: API-Monitoring verwenden
So diagnostizieren Sie den Fehler mit API Monitoring:
- Melden Sie sich in der Apigee Edge-UI als Nutzer mit einer geeigneten Rolle an.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Rufen Sie die Seite Analysieren > API-Monitoring > Untersuchen auf.
- Wählen Sie den Zeitraum aus, in dem die Fehler aufgetreten sind.
Stellen Sie den Fehlercode im Vergleich zur Zeit dar.
Wählen Sie eine Zelle mit dem Fehlercode
messaging.adaptors.http.flow.SslHandshakeFailedaus, wie unten dargestellt:
Informationen zum Fehlercode
messaging.adaptors.http.flow.SslHandshakeFailedwerden wie unten dargestellt angezeigt:
Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
- Notieren Sie sich im Fenster Logs die folgenden Details:
- Nachrichten-ID der Anfrage
- Statuscode:
503 - Fehlerquelle:
target - Fehlercode:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
Vorgehensweise 2: Trace-Tool verwenden
So diagnostizieren Sie den Fehler mit dem Trace-Tool:
- Aktivieren Sie die Trace-Sitzung und entweder
- Warten Sie, bis der Fehler
503 Service Unavailablemit dem Fehlercodemessaging.adaptors.http.flow.SslHandshakeFailedauftritt. - Wenn Sie das Problem reproduzieren können, führen Sie den API-Aufruf aus, um das Problem zu reproduzieren:
503 Service Unavailable
- Warten Sie, bis der Fehler
Prüfen Sie, ob Alle FlowInfos anzeigen aktiviert ist:

- Wählen Sie eine der fehlgeschlagenen Anfragen aus und sehen Sie sich den Trace an.
- Navigieren Sie durch die verschiedenen Phasen des Traces und suchen Sie nach der Stelle, an der der Fehler aufgetreten ist.
Der Fehler wird in der Regel nach der Phase Target Request Flow Started angezeigt, wie unten dargestellt:

- Notieren Sie sich die Werte der folgenden Elemente 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 targetgibt an, dass der SSL-Handshake fehlgeschlagen ist, da der Message Processor von Apigee Edge das Zertifikat des Backend-Servers nicht validieren konnte.
- Fehler:
- Suchen Sie im Trace nach der Phase AX (Analytics Data Recorded) und klicken Sie darauf.
Scrollen Sie nach unten zum Abschnitt Phase Details Error Headers (Fehlerheader für Phasendetails) und ermitteln Sie die Werte von X-Apigee-fault-code, X-Apigee-fault-source und X-Apigee-Message-ID, wie unten dargestellt:

- Notieren Sie sich die Werte von X-Apigee-fault-code, X-Apigee-fault-source und X-Apigee-Message-ID:
| 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:
- Wenn Sie Private Cloud-Nutzer sind, können Sie die NGINX-Zugriffsprotokolle verwenden, um die wichtigsten Informationen zu HTTP
503 Service Unavailablezu ermitteln. NGINX-Zugriffslogs prüfen:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Suchen Sie nach
503-Fehlern mit dem Fehlercodemessaging.adaptors.http.flow.SslHandshakeFailedin einem bestimmten Zeitraum (wenn das Problem in der Vergangenheit aufgetreten ist) oder nach Anfragen, bei denen weiterhin503-Fehler auftreten. Wenn Sie
503-Fehler finden, bei denen der X-Apigee-fault-code mit dem Wert vonmessaging.adaptors.http.flow.SslHandshakeFailedübereinstimmt, ermitteln Sie den Wert von X-Apigee-fault-source.Beispiel für einen 503-Fehler aus dem NGINX-Zugriffslog:
Der obige Beispiel-Eintrag aus dem NGINX-Zugriffslog hat die folgenden Werte für X-Apigee-fault-code und X-Apigee-fault-source:
Header Wert X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
Logs des Message Processors
Vorgehensweise 4: Message Processor-Logs verwenden
- Ermitteln Sie die Nachrichten-ID einer der fehlgeschlagenen Anfragen mit API Monitoring, dem Trace-Tool oder NGINX-Zugriffsprotokollen, wie in Gängige Diagnoseschritte beschrieben.
Suchen Sie im Message Processor-Log (
/opt/apigee/var/log/edge-message-processor/logs/system.log) nach der ID der spezifischen Anfragenachricht. Möglicherweise wird der folgende Fehler angezeigt:org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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 problemDer obige Fehler weist darauf hin, dass der SSL-Handshake zwischen dem Message Processor und dem Backend-Server fehlgeschlagen ist.
Danach folgt eine Ausnahme mit detailliertem Stacktrace, wie unten dargestellt:
org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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 targetat sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302) ... <snipped>Der Handshake-Fehler hat folgende Ursachen:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetDies weist darauf hin, dass der SSL-Handshake fehlgeschlagen ist, da der Message Processor von Apigee Edge das Zertifikat des Backend-Servers nicht validieren konnte.
Ursache: Falsches/unvollständiges Zertifikat oder falsche/unvollständige Zertifikatskette im Truststore des Message Processors
Diagnose
- Ermitteln Sie den Fehlercode und die Fehlerquelle für den beobachteten Fehler mithilfe von API Monitoring, dem Trace-Tool oder NGINX-Zugriffsprotokollen, wie in Häufige Diagnoseschritte beschrieben.
- Wenn der Fehlercode
messaging.adaptors.http.flow.SslHandshakeFailedist, ermitteln Sie die Fehlermeldung mit einer der folgenden Methoden: - Ermitteln Sie die error.cause mit dem Trace-Tool, wie unter Allgemeine Diagnoseschritte beschrieben.
- Suchen Sie die Ausnahme anhand der Message Processor-Logs, wie unter Allgemeine Diagnoseschritte beschrieben.
- Suchen Sie in der Fehlerantwort auf Ihren API-Aufruf nach dem
faultstring, wie in Fehlermeldung beschrieben. - 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, ist der SSL-Handshake fehlgeschlagen, da der Message Processor von Apigee Edge das Zertifikat des Backend-Servers nicht validieren konnte.
Sie können dieses Problem in zwei Phasen beheben:
- Phase 1:Zertifikatkette des Backend-Servers ermitteln
- Phase 2:Zertifikatkette im Truststore des Message Processor vergleichen
Phase 1
Phase 1: Zertifikatkette des Backend-Servers ermitteln
Verwenden Sie eine der folgenden Methoden, um die Zertifikatkette des Backend-Servers zu ermitteln:
openssl
Führen Sie den Befehl openssl für den Hostnamen des Backend-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 Zertifikatkette des Backend-Servers aus der Befehlsausgabe 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
- Wenn Sie ein Public Cloud-Nutzer sind, erfassen Sie die TCP/IP-Pakete auf dem Backend-Server.
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie die TCP/IP-Pakete auf dem Backend-Server oder Message Processor erfassen. Erfassen Sie sie vorzugsweise auf dem Backend-Server, da die Pakete dort entschlüsselt werden.
Verwenden Sie den folgenden tcpdump-Befehl, um TCP/IP-Pakete zu erfassen:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Analysieren Sie die TCP/IP-Pakete mit dem Wireshark-Tool oder einem ähnlichen Tool, mit dem Sie vertraut sind.
Beispielanalyse von „tcpdump“
- Paket 43:Der Message Processor (Quelle) hat eine
Client Hello-Nachricht an den Backend-Server (Ziel) gesendet. - Paket 44:Der Backend-Server bestätigt den Empfang der
Client Hello-Nachricht vom Message Processor. - Paket 45:Der Backend-Server sendet die
Server Hello-Nachricht zusammen mit seinem Zertifikat. - Paket 46:Der Message Processor bestätigt den Empfang der
Server Hello-Nachricht und des Zertifikats. Paket 47:Der Message Processor sendet eine
FIN, ACK-Nachricht, gefolgt vonRST, ACKin Paket 48.Dies weist darauf hin, dass die Validierung des Backend-Serverzertifikats durch den Message Processor fehlgeschlagen ist. Das liegt daran, dass der Message Processor kein Zertifikat hat, das mit dem Zertifikat des Backend-Servers übereinstimmt, oder das Zertifikat des Backend-Servers nicht mit den im Truststore des Message Processors verfügbaren Zertifikaten vertrauen kann.
Sie können zu Paket 45 zurückkehren und die vom Backend-Server gesendete Zertifikatskette ermitteln.
- In diesem Beispiel sehen Sie, dass der Server ein Endzertifikat mit
common name (CN) = mocktarget.apigee.net, gefolgt von einem Zwischenzertifikat mitCN= GTS CA 1D4und einem Root-Zertifikat mitCN = GTX Root R1gesendet hat.
Wenn Sie festgestellt haben, dass die Zertifikatsvalidierung des Servers fehlgeschlagen ist, fahren Sie mit Phase 2: Zertifikat des Backend-Servers mit den im Truststore des Message-Processors gespeicherten Zertifikaten vergleichen fort.
- Paket 43:Der Message Processor (Quelle) hat eine
Phase 2
Phase 2: Zertifikat des Backend-Servers mit den im Truststore des Message Processor gespeicherten Zertifikaten vergleichen
- Zertifikatkette des Backend-Servers ermitteln
- So ermitteln Sie das im Truststore des Message Processor gespeicherte Zertifikat:
Rufen Sie den Truststore-Referenznamen aus dem Element
TrustStoreim AbschnittSSLInfoin derTargetEndpointab.Sehen wir uns einen Beispielabschnitt
SSLInfoin einerTargetEndpoint-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>- Im obigen Beispiel lautet der Referenzname
TrustStoremyCompanyTruststoreRef. Wählen Sie in der Edge-Benutzeroberfläche Umgebungen > Verweise aus. Notieren Sie sich den Namen in der Spalte Reference (Referenz) für die jeweilige Truststore-Referenz. Das ist der Name Ihres Truststores.
Im obigen Beispiel lautet der Truststore-Name:
myCompanyTruststoreRef:
myCompanyTruststore
Rufen Sie die im Truststore gespeicherten Zertifikate (im vorherigen Schritt ermittelt) mit den folgenden APIs ab:
Alle Zertifikate für einen Keystore oder Truststore abrufen: Diese API listet alle Zertifikate im angegebenen Truststore auf.
Nutzer der öffentlichen Cloud:
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"
Dabei gilt:
- 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
myCompanyTruststoresind:[ "serverCert" ]
-
Zertifikatsdetails für das jeweilige Zertifikat aus einem Keystore oder Truststore abrufen
Diese API gibt Informationen zu einem bestimmten Zertifikat im angegebenen Truststore zurück.
Nutzer der öffentlichen Cloud:
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"
Dabei gilt:
- 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
Die Details von
serverCertzeigen Betreff und Aussteller wie folgt:Leaf-/Entity-Zertifikat:
"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",
Prüfen Sie, ob das in Schritt 1 abgerufene tatsächliche Serverzertifikat mit dem in Schritt 3 abgerufenen Zertifikat übereinstimmt, das im Truststore gespeichert ist. Wenn sie nicht übereinstimmen, ist das die Ursache des Problems.
Sehen wir uns die Zertifikate im obigen Beispiel einzeln an:
- Untergeordnetes Zertifikat:
Vom Backend-Server:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
Aus dem Truststore des Message Processors (Client):
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Das im Truststore gespeicherte Blattzertifikat stimmt mit dem des Backend-Servers überein.
- Zwischenzertifikat:
Vom Backend-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 Processors (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 des Backend-Servers überein.
- Root-Zertifikat:
Vom Backend-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 vollständig im Truststore des Message Processors.
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 Unavailablemit dem Fehlercodemessaging.adaptors.http.flow.SslHandshakeFailedan die Clientanwendungen zurück.
- Untergeordnetes Zertifikat:
Auflösung
- Achten Sie darauf, dass Sie die richtige und vollständige Zertifikatskette des Backend-Servers haben.
- Wenn Sie ein Public Cloud-Nutzer sind, folgen Sie der Anleitung unter TLS-Zertifikat für die Cloud aktualisieren, um das Zertifikat im Truststore des Apigee Edge-Message Processors zu aktualisieren.
- Wenn Sie ein Private Cloud-Nutzer sind, folgen Sie der Anleitung unter TLS-Zertifikat für die Private Cloud aktualisieren, um das Zertifikat im Truststore des Apigee Edge-Message Processors zu aktualisieren.
Ursache: FQDN im Zertifikat des Back-End-Servers stimmt nicht mit dem Hostnamen im Zielendpunkt überein
Wenn der Backend-Server eine Zertifikatskette mit einem FQDN präsentiert, der nicht mit dem im Zielendpunkt angegebenen Hostnamen übereinstimmt, gibt die Nachrichtenverarbeitung 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
- Sehen Sie sich den spezifischen TargetEndpoint im API-Proxy an, in dem dieser Fehler auftritt, und notieren Sie sich den Hostnamen des Backend-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. Ermitteln Sie den FQDN im Zertifikat des Backend-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 chainan und notieren Sie sich den FQDN, der als Teil von CN im Betreff des Leaf-Zertifikats angegeben ist.Certificate chain 0 s:/
CN=backend.apigee.neti:/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 R1Im obigen Beispiel ist der FQDN des Backend-Servers
backend.apigee.net.- Wenn der Hostname des Backend-Servers aus Schritt 1 und der FQDN aus Schritt 2 nicht übereinstimmen, ist dies die Ursache des Fehlers.
- Im oben besprochenen Beispiel lautet der Hostname im Zielendpunkt
backend.company.com. Der FQDN-Name im Zertifikat des Backend-Servers ist jedochbackend.apigee.net. Da sie nicht übereinstimmen, wird dieser Fehler angezeigt.
Auflösung
Sie können dieses Problem mit einer der folgenden Methoden beheben:
Richtiger FQDN
Keystore des Backend-Servers mit dem richtigen FQDN und einer gültigen und vollständigen Zertifikatskette aktualisieren:
- Wenn Sie kein Zertifikat für den Back-End-Server mit dem richtigen FQDN haben, besorgen Sie sich das entsprechende Zertifikat von einer geeigneten Zertifizierungsstelle.
Prüfen Sie, ob Sie eine gültige und vollständige Zertifikatskette des Backend-Servers haben.
- Sobald Sie die gültige und vollständige Zertifikatskette mit dem richtigen FQDN des Backend-Servers im Blatt- oder Entitätszertifikat haben, der mit dem im Zielendpunkt angegebenen Hostnamen identisch ist, aktualisieren Sie den Keystore des Backends mit der vollständigen Zertifikatskette.
Backend-Server korrigieren
Zielendpunkt mit dem Hostnamen des richtigen Backend-Servers aktualisieren:
- Wenn der Hostname im Zielendpunkt falsch angegeben wurde, aktualisieren Sie den Zielendpunkt mit dem richtigen Hostnamen, der mit dem FQDN im Zertifikat des Backend-Servers übereinstimmt.
Speichern Sie die Änderungen am API-Proxy.
Wenn im oben besprochenen Beispiel der Hostname des Backend-Servers falsch angegeben wurde, können Sie ihn mit dem FQDN aus dem Zertifikat des Backend-Servers korrigieren, also
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/unvollständige Zertifikatskette, die vom Backend-Server präsentiert wird
Diagnose
- Rufen Sie die Zertifikatkette des Backend-Servers ab, indem Sie den Befehl
opensslfür den Hostnamen des Backend-Servers ausführen:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Notieren Sie sich den
Certificate chainaus der Ausgabe des obigen Befehls.Beispiel für die Zertifikatkette des Backend-Servers aus der Befehlsausgabe des OpenSSL-Befehls:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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 - Prüfen Sie, ob Sie die richtige und vollständige Zertifikatskette haben, wie unter Zertifikatskette validieren beschrieben.
Wenn Sie nicht die gültige und vollständige Zertifikatskette für den Backend-Server haben, ist dies die Ursache für dieses Problem.
In der oben gezeigten Beispielzertifikatkette des Backend-Servers fehlt das Root-Zertifikat. Daher wird dieser Fehler angezeigt.
Auflösung
Aktualisieren Sie den Schlüsselspeicher des Backend-Servers mit einer gültigen und vollständigen Zertifikatskette:
Prüfen Sie, ob Sie eine gültige und vollständige Zertifikatskette des Backend-Servers haben.
- Aktualisieren Sie die gültige und vollständige Zertifikatskette im Schlüsselspeicher des Backend-Servers.
Wenn das Problem weiterhin besteht, gehen Sie zu Erfassen von Diagnoseinformationen erforderlich.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem auch nach Befolgen der obigen Anweisungen weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen 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
- Name des API-Proxys
- Vollständiger
curl-Befehl zum Reproduzieren des Fehlers - Trace-Datei mit dem 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:
- Vollständige angezeigte Fehlermeldung
- API-Proxy-Bundle
- Trace-Datei mit dem Fehler
- Message Processor-Logs
/opt/apigee/var/log/edge-message-processor/logs/system.log - Ausgabe des Befehls
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - TCP/IP-Pakete, die auf dem Backend-Server oder Message Processor erfasst wurden.
- Ausgabe der API Get all certificates for a keystore or truststore sowie die Details der einzelnen Zertifikate, die mit der API Get Cert Details from a Keystore or Truststore abgerufen wurden.
Verweise
- Zertifikat Vertrauenskette
- OpenSSL-Befehl