<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
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:
- <ph type="x-smartling-placeholder"></ph> Melden Sie sich in der Apigee Edge-Benutzeroberfläche als Nutzer mit einem Rolle.
Wechseln Sie zu der Organisation, in der Sie das Problem untersuchen möchten.
- Wechseln Sie zum Bereich Analysieren > API-Monitoring > Untersuchen.
- Wählen Sie den Zeitraum aus, in dem Sie die Fehler beobachtet haben.
Stellen Sie den Fehlercode in den Vergleich mit der Zeit ein.
<ph type="x-smartling-placeholder">Wähle eine Zelle mit dem Fehlercode aus
messaging.adaptors.http.flow.SslHandshakeFailed
wie gezeigt unten:Informationen über den Fehlercode
messaging.adaptors.http.flow.SslHandshakeFailed
wird angezeigt als (siehe unten):Klicken Sie auf Logs ansehen und maximieren Sie die Zeile für die fehlgeschlagene Anfrage.
- 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:
- Aktivieren Sie die Trace-Sitzung und entweder
<ph type="x-smartling-placeholder">
- </ph>
- Auf den Fehler
503 Service Unavailable
mit Fehlercode wartenmessaging.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
- Auf den Fehler
Achten Sie darauf, dass Show all FlowInfos (Alle FlowInfos anzeigen) aktiviert ist:
- Wählen Sie eine der fehlgeschlagenen Anfragen aus und prüfen Sie den Trace.
- Gehen Sie die verschiedenen Phasen des Trace durch und ermitteln Sie, wo der Fehler aufgetreten ist.
Der Fehler wird in der Regel nach der Phase Zielanfragefluss gestartet angezeigt. wie unten dargestellt:
- 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.
- Fehler:
- Navigieren Sie im Trace zur Phase AX (Analytics Data Recorded) und klicken Sie darauf.
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:
- Notieren Sie sich die Werte von X-Apigee-fault-code und X-Apigee-fault-code. 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
<ph type="x-smartling-placeholder">So diagnostizieren Sie den Fehler mithilfe von NGINX-Zugriffslogs:
- Wenn Sie ein Private Cloud-Nutzer sind, können Sie mithilfe von NGINX-Zugriffslogs ermitteln,
die wichtigsten Informationen zu HTTP
503 Service Unavailable
. Prüfen Sie die NGINX-Zugriffslogs:
<ph type="x-smartling-placeholder">/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Nach
503
-Fehlern mit Fehlercode suchenmessaging.adaptors.http.flow.SslHandshakeFailed
während eines bestimmten Zeitraums (wenn das Problem im oder Anfragen mit503
fehlschlagen. Wenn Sie
503
-Fehler mit dem X-Apigee-fault-code finden Wert vonmessaging.adaptors.http.flow.SslHandshakeFailed
, dann Bestimmen Sie den Wert von X-Apigee-fault-source..Beispielfehler 503 aus dem NGINX-Zugriffsprotokoll:
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">- 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.
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 problemDer 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
- 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.
- Wenn der Fehlercode
messaging.adaptors.http.flow.SslHandshakeFailed
ist, dann: Ermitteln Sie die Fehlermeldung mithilfe einer der folgenden Methoden: - Suchen Sie mit dem Trace-Tool nach error.cause, wie unter Häufige Diagnoseschritte
- Suchen Sie die Ausnahme mithilfe von Message Processor-Logs, wie unter Häufige Diagnoseschritte
- Suchen Sie die
faultstring
aus der Fehlerantwort auf Ihren API-Aufruf, wie in Fehlermeldung - 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:
- Phase 1: Bestimmen der Zertifikatskette des Back-End-Servers
- 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">- Wenn Sie Nutzer einer öffentlichen Cloud sind, erfassen Sie die TCP/IP-Pakete auf der Back-End-Server.
- 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.
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">Analysieren Sie die TCP/IP-Pakete mithilfe der Wireshark-Tool oder mit dem Sie vertraut sind.
Beispielanalyse von tcpdump
- 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 vonRST, 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
- In diesem Beispiel hat der Server ein untergeordnetes Zertifikat
durch den
common name (CN) = mocktarget.apigee.net
, gefolgt von einem Zwischenzertifikat mitCN= GTS CA 1D4
und Stammzertifikat mitCN = 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.
- Paket 43: Der Message Processor (Quelle) hat eine
Phase 2
Phase 2: Vergleichen Sie das Zertifikat des Backend-Servers und die Zertifikate, die im Truststore des Nachrichtenverarbeiters
- Bestimmen Sie die Zertifikatskette des Back-End-Servers.
- 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>
Rufen Sie den Truststore-Referenznamen aus dem Element
TrustStore
ab. im AbschnittSSLInfo
der DateiTargetEndpoint
.Sehen wir uns einen
SSLInfo
-Beispielabschnitt in einerTargetEndpoint
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>
- Im obigen Beispiel lautet der Name der
TrustStore
-ReferenzmyCompanyTruststoreRef
. 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.
Im obigen Beispiel lautet der Truststore-Name:
myCompanyTruststoreRef:
myCompanyTruststore
Die im Truststore gespeicherten Zertifikate abrufen (im vorherigen Schritt ermittelt) mithilfe der folgenden APIs:
<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" ]
- <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",
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:
- 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.
- 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.
- 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.
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.
- Lehrbescheinigung:
Auflösung
- Stelle sicher, dass du über die korrekte und vollständige Zertifikatskette des Back-End-Servers verfügst.
- 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.
- 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
- 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
. 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 R1Im obigen Beispiel lautet der FQDN des Backend-Servers
backend.apigee.net
.- Wenn der Hostname des Backend-Servers aus Schritt 1 und der FQDN abgerufen wird, Schritt 2 nicht übereinstimmen, ist dies die Ursache des Fehlers.
- Im oben erläuterten Beispiel ist der Hostname im Zielendpunkt
backend.company.com
Der FQDN-Name im Zertifikat des Back-End-Servers istbackend.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:
- Wenn Sie kein Zertifikat eines Backend-Servers mit dem richtigen FQDN haben, Fordern Sie dann das entsprechende Zertifikat von einer entsprechenden Zertifizierungsstelle an.
Prüfen Sie, ob Sie gültige und vollständige Zertifikatskette des Back-End-Servers.
<ph type="x-smartling-placeholder">- 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.
Richtiger Backend-Server
Aktualisieren Sie den Zielendpunkt mit dem richtigen Hostnamen des Backend-Servers:
- 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.
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
- 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 - Stellen Sie sicher, dass Sie die korrekte und vollständige Zertifikatskette haben, wie unter Zertifikatskette validieren
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:
<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">- Aktualisieren Sie die gültige und vollständige Zertifikatskette im Schlüsselspeicher des Back-End-Servers.
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">
- </ph>
- Vollständige Fehlermeldung erkannt
- API-Proxy-Bundle
- Ablaufverfolgungsdatei mit 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_#
- Auf dem Backend-Server oder Message Processor erfasste TCP/IP-Pakete.
- Ausgabe von <ph type="x-smartling-placeholder"></ph> Rufen Sie alle Zertifikate für eine Keystore oder Truststore API sowie die Details zu jedes erworbene Zertifikat mit <ph type="x-smartling-placeholder"></ph> Rufen Sie Zertifikatsdetails aus einem Schlüsselspeicher oder einer Truststore API ab.
Verweise
- Zertifikatskette
- OpenSSL-Befehl