Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 503 Service Unavailable z kodem błędu messaging.adaptors.http.flow.SslHandshakeFailed w odpowiedzi na wywołania interfejsu API.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 503 Service Unavailable
Możesz też zobaczyć ten komunikat o błędzie:
{
"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"
}
}
}Możliwe przyczyny
Kod stanu 503 Service Unavailable z kodem błędu messaging.adaptors.http.flow.SslHandshakeFailed może pojawić się z kilku powodów z powodu błędu podczas procesu uzgadniania protokołu SSL między procesorem komunikatów Apigee Edge a serwerem backendu. Komunikat o błędzie faultstring zwykle wskazuje
możliwą przyczynę tego błędu.
W zależności od komunikatu o błędzie wyświetlanego w faultstring musisz użyć odpowiednich technik, aby rozwiązać problem. Z tego przewodnika dowiesz się, jak rozwiązać ten problem, jeśli w 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 faultstring pojawi się komunikat o błędzie.
Ten błąd występuje podczas procesu uzgadniania połączenia SSL między procesorem komunikatów Apigee Edge a serwerem backendu:
- Jeśli truststore procesora komunikatów Apigee Edge:
- zawiera łańcuch certyfikatów, który nie pasuje do pełnego łańcucha certyfikatów serwera backendu, LUB
- Nie zawiera pełnego łańcucha certyfikatów serwera backendu
- Jeśli łańcuch certyfikatów przedstawiony przez serwer backendu:
- Zawiera pełną i jednoznaczną nazwę domeny (FQDN), która nie pasuje do nazwy hosta określonej w docelowym punkcie końcowym.
- Zawiera nieprawidłowy lub niekompletny łańcuch certyfikatów
Możliwe przyczyny tego problemu:
| Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
|---|---|---|
| Nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów w magazynie zaufanych certyfikatów procesora wiadomości | Certyfikat lub jego łańcuch przechowywany w magazynie zaufanych certyfikatów procesora komunikatów Apigee Edge nie pasuje do łańcucha certyfikatów serwera backendu lub nie zawiera pełnego łańcucha certyfikatów serwera backendu. | Użytkownicy Edge Private Cloud i Public Cloud |
| Niezgodność pełnej i jednoznacznej nazwy domeny w certyfikacie serwera backendu z nazwą hosta w docelowym punkcie końcowym | Certyfikat przedstawiony przez serwer backendu zawiera pełną i jednoznaczną nazwę domeny, która nie jest zgodna z nazwą hosta podaną w docelowym punkcie końcowym. | Użytkownicy Edge Private Cloud i Public Cloud |
| Serwer backendu przedstawił nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów | Łańcuch certyfikatów przedstawiony przez serwer backendu jest nieprawidłowy lub niekompletny. | Użytkownicy Edge Private Cloud i Public Cloud |
Typowe etapy diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub technik:
Monitorowanie interfejsów API
Procedura 1. Korzystanie z monitorowania interfejsu API
Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z odpowiednią rolą.
Przełącz się na organizację, w której chcesz zbadać problem.
- Otwórz stronę Analiza > Monitorowanie interfejsu API > Zbadaj.
- Wybierz konkretny przedział czasowy, w którym wystąpiły błędy.
Wykreśl kod błędu na osi czasu.
Wybierz komórkę z kodem błędu
messaging.adaptors.http.flow.SslHandshakeFailed, jak pokazano poniżej:
Informacje o kodzie błędu
messaging.adaptors.http.flow.SslHandshakeFailedsą wyświetlane w sposób pokazany poniżej:
Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Dzienniki zanotuj te informacje:
- Identyfikator wiadomości z żądaniem
- Kod stanu:
503 - Źródło błędu:
target - Kod błędu:
messaging.adaptors.http.flow.SslHandshakeFailed
Śledzenie
Procedura 2. Używanie narzędzia Śledzenie
Aby zdiagnozować błąd za pomocą narzędzia Trace:
- Włącz śledzenie sesji i wybierz jedną z tych opcji:
- Poczekaj na błąd
503 Service Unavailableo kodziemessaging.adaptors.http.flow.SslHandshakeFailedlub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby go odtworzyć.
503 Service Unavailable
- Poczekaj na błąd
Sprawdź, czy opcja Pokaż wszystkie informacje o przepływach jest włączona:

- Wybierz jedno z nieudanych żądań i sprawdź ślad.
- Przeglądaj różne fazy śledzenia i sprawdź, gdzie wystąpił błąd.
Błąd zwykle występuje po fazie Target Request Flow Started, jak pokazano poniżej:

- Zapisz te wartości ze śladu:
- błąd:
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 - Wartość błędu
SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetwskazuje, że uzgadnianie protokołu SSL nie powiodło się, ponieważ procesor komunikatów Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.
- błąd:
- W śladzie przejdź do fazy AX (Analytics Data Recorded) i kliknij ją.
Przewiń w dół do sekcji Phase Details Error Headers (Nagłówki błędów szczegółów fazy) i określ wartości X-Apigee-fault-code, X-Apigee-fault-source i X-Apigee-Message-ID, jak pokazano poniżej:

- Zanotuj wartości X-Apigee-fault-code, X-Apigee-fault-source i X-Apigee-Message-ID:
| Nagłówki błędów | Wartość |
|---|---|
| X-Apigee-fault-code | messaging.adaptors.http.flow.SslHandshakeFailed |
| X-Apigee-fault-source | target |
| X-Apigee-Message-ID | MESSAGE_ID |
NGINX
Procedura 3. Korzystanie z dzienników dostępu NGINX
Aby zdiagnozować błąd za pomocą dzienników dostępu NGINX:
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz używać dzienników dostępu NGINX do określania kluczowych informacji o żądaniach HTTP
503 Service Unavailable. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Sprawdź, czy w określonym czasie wystąpiły jakieś
503błędy z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed(jeśli problem wystąpił w przeszłości) lub czy nadal występują jakieś nieudane żądania z kodem503. Jeśli znajdziesz błędy
503, w których X-Apigee-fault-code ma wartośćmessaging.adaptors.http.flow.SslHandshakeFailed, określ wartość X-Apigee-fault-source.Przykładowy błąd 503 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z dziennika dostępu NGINX zawiera te wartości atrybutów X-Apigee-fault-code i X-Apigee-fault-source:
Nagłówki Wartość X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailedX-Apigee-fault-source target
Dzienniki procesora komunikatów
Procedura 4. Korzystanie z dzienników procesora komunikatów
- Określ identyfikator wiadomości jednego z nieudanych żądań za pomocą narzędzia do monitorowania interfejsu API, narzędzia śledzenia lub dzienników dostępu NGINX zgodnie z opisem w artykule Typowe czynności diagnostyczne.
Wyszukaj w dzienniku procesora komunikatów (
/opt/apigee/var/log/edge-message-processor/logs/system.log) identyfikator konkretnej wiadomości z żądaniem. Może pojawić się następujący błąd: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 problemPowyższy błąd oznacza, że nie udało się uzgodnić połączenia protokołu SSL między procesorem komunikatów a serwerem backendu.
Nastąpi wyjątek ze szczegółowym zrzutem stosu, jak pokazano poniżej:
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>Zwróć uwagę, że niepowodzenie uzgadniania połączenia jest spowodowane:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested targetOznacza to, że uzgadnianie protokołu SSL nie powiodło się, ponieważ procesor komunikatów Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.
Przyczyna: nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów w magazynie zaufanych certyfikatów procesora wiadomości
Diagnostyka
- Określ kod błędu i źródło błędu zaobserwowanego za pomocą monitorowania interfejsu API, narzędzia śledzenia lub dzienników dostępu NGINX zgodnie z opisem w typowych krokach diagnostycznych.
- Jeśli kod błędu to
messaging.adaptors.http.flow.SslHandshakeFailed, określ komunikat o błędzie, korzystając z jednej z tych metod: - Znajdź error.cause za pomocą narzędzia Trace zgodnie z instrukcjami w artykule Typowe czynności diagnostyczne.
- Znajdź wyjątek, korzystając z dzienników procesora komunikatów, zgodnie z opisem w typowych krokach diagnostycznych.
- Znajdź
faultstringw odpowiedzi na wywołanie interfejsu API, jak w komunikacie o błędzie. - Jeśli pojawi się komunikat o błędzie
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", oznacza to, że uzgadnianie protokołu SSL zakończyło się niepowodzeniem, ponieważ procesor komunikatów Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.
Ten problem możesz rozwiązać w 2 etapach:
- Etap 1. Określ łańcuch certyfikatów serwera backendu
- Etap 2. Porównaj łańcuch certyfikatów przechowywany w magazynie zaufanych certyfikatów procesora wiadomości.
Faza 1
Etap 1. Określ łańcuch certyfikatów serwera backendu
Aby określić łańcuch certyfikatów serwera backendu, użyj jednej z tych metod:
openssl
Wykonaj polecenie openssl na hoście serwera backendu w ten sposób:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
Zwróć uwagę na łańcuch certyfikatów w danych wyjściowych powyższego polecenia:
Przykładowy łańcuch certyfikatów serwera backendu z wyniku polecenia 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
- Jeśli jesteś użytkownikiem chmury publicznej, przechwyć pakiety TCP/IP na serwerze backendu.
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz przechwytywać pakiety TCP/IP na serwerze backendu lub procesorze komunikatów. Najlepiej przechwytywać je na serwerze backendu, ponieważ pakiety są na nim odszyfrowywane.
Aby przechwycić pakiety TCP/IP, użyj tego polecenia tcpdump:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Przeanalizuj pakiety TCP/IP za pomocą narzędzia Wireshark lub podobnego narzędzia, które znasz.
Przykładowa analiza narzędzia Tcpdump
- Pakiet 43: procesor komunikatów (źródło) wysłał
Client Hellowiadomość do serwera backendu (miejsce docelowe). - Pakiet 44: serwer backendu potwierdza otrzymanie wiadomości
Client Helloz procesora komunikatów. - Pakiet 45: serwer backendu wysyła
Server Hellowiadomość wraz z certyfikatem. - Pakiet 46: procesor wiadomości potwierdza otrzymanie
Server Hellowiadomości i certyfikatu. Pakiet 47: procesor komunikatów wysyła wiadomość
FIN, ACK, a następnieRST, ACKw pakiecie 48.Oznacza to, że weryfikacja certyfikatu serwera backendu przez procesor komunikatów zakończyła się niepowodzeniem. Dzieje się tak, ponieważ procesor komunikatów nie ma certyfikatu, który pasuje do certyfikatu serwera backendu, lub nie może zaufać certyfikatowi serwera backendu za pomocą certyfikatów dostępnych w swoim (procesora komunikatów) magazynie zaufanych certyfikatów.
Możesz wrócić do pakietu 45 i sprawdzić łańcuch certyfikatów wysłany przez serwer backendu.
- W tym przykładzie widać, że serwer wysłał certyfikat liścia
z wartością
common name (CN) = mocktarget.apigee.net, a następnie certyfikat pośredni z wartościąCN= GTS CA 1D4i certyfikat główny z wartościąCN = GTX Root R1.
Jeśli stwierdzisz, że weryfikacja certyfikatu serwera nie powiodła się, przejdź do Fazy 2. Porównaj certyfikat serwera backendu z certyfikatami przechowywanymi w magazynie zaufanych certyfikatów procesora wiadomości.
- Pakiet 43: procesor komunikatów (źródło) wysłał
Faza 2
Etap 2. Porównaj certyfikat serwera backendu z certyfikatami przechowywanymi w magazynie zaufanych certyfikatów procesora wiadomości
- Określ łańcuch certyfikatów serwera backendu.
- Określ certyfikat przechowywany w magazynie zaufanych certyfikatów procesora wiadomości, wykonując te czynności:
Pobierz nazwę odwołania do magazynu zaufanych certyfikatów z elementu
TrustStorew sekcjiSSLInfow plikuTargetEndpoint.Przyjrzyjmy się przykładowej sekcji
SSLInfowTargetEndpointkonfiguracji:<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>- W powyższym przykładzie nazwa odwołania
TrustStoretomyCompanyTruststoreRef. W interfejsie Edge wybierz Środowiska > Pliki referencyjne. Zwróć uwagę na nazwę w kolumnie Reference (Odwołanie) dla konkretnego odwołania do magazynu zaufanych certyfikatów. Będzie to nazwa magazynu zaufanych certyfikatów.
W powyższym przykładzie nazwa magazynu zaufanych certyfikatów to:
myCompanyTruststoreRef:
myCompanyTruststore
Pobierz certyfikaty przechowywane w magazynie zaufanych certyfikatów (określonym w poprzednim kroku) za pomocą tych interfejsów API:
Pobierz wszystkie certyfikaty z magazynu kluczy lub magazynu zaufanych certyfikatów Ten interfejs API zawiera listę wszystkich certyfikatów w określonym magazynie zaufanych certyfikatów.
Użytkownik chmury publicznej:
curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
Użytkownik Private Cloud:
curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
Gdzie:
- ORGANIZATION_NAME to nazwa organizacji.
- ENVIRONMENT_NAME to nazwa środowiska
- KEYSTORE_NAME to nazwa magazynu kluczy.
- Zmienna $TOKEN jest ustawiona na token dostępu OAuth 2.0 zgodnie z opisem w sekcji Uzyskiwanie tokena dostępu OAuth 2.0.
curlopcje użyte w tym przykładzie są opisane w artykule Używanie curl.
Przykładowe dane wyjściowe:
Certyfikaty z przykładowego magazynu zaufanych certyfikatów
myCompanyTruststoreto:[ "serverCert" ]
-
Pobierz szczegóły konkretnego certyfikatu z magazynu kluczy lub magazynu zaufanych certyfikatów.
Ten interfejs API zwraca informacje o konkretnym certyfikacie w określonym magazynie zaufanych certyfikatów.
Użytkownik chmury publicznej:
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"
Użytkownik chmury Private Cloud
curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
Gdzie:
- ORGANIZATION_NAME to nazwa organizacji.
- ENVIRONMENT_NAME to nazwa środowiska
- KEYSTORE_NAME to nazwa magazynu kluczy.
- CERT_NAME to nazwa certyfikatu.
- Zmienna $TOKEN jest ustawiona na token dostępu OAuth 2.0 zgodnie z opisem w sekcji Uzyskiwanie tokena dostępu OAuth 2.0.
curlopcje użyte w tym przykładzie są opisane w artykule Używanie curl.
Przykładowe dane wyjściowe
Szczegóły
serverCertzawierają temat i wystawcę w tym formacie:Certyfikat liścia/podmiotu:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Certyfikat pośredni:
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Sprawdź, czy rzeczywisty certyfikat serwera uzyskany w kroku 1 i certyfikat przechowywany w magazynie zaufanych certyfikatów uzyskany w kroku 3 są zgodne. Jeśli się nie zgadzają, to jest to przyczyna problemu.
Na podstawie powyższego przykładu przeanalizujmy po kolei poszczególne certyfikaty:
- Certyfikat wierzchołka ścieżki:
Z serwera backendu:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
Z magazynu zaufanych certyfikatów procesora wiadomości (klienta):
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Certyfikat liścia przechowywany w magazynie zaufanych certyfikatów jest zgodny z certyfikatem serwera backendu.
- Certyfikat pośredni:
Z serwera backendu:
s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
Z magazynu zaufanych certyfikatów procesora wiadomości (klienta):
"subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US", "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
Certyfikat pośredni przechowywany w magazynie zaufanych certyfikatów jest zgodny z certyfikatem serwera backendu.
- Certyfikat główny:
Z serwera backendu:
s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1 i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
W magazynie zaufanych certyfikatów procesora wiadomości całkowicie brakuje certyfikatu głównego.
Ponieważ w magazynie zaufanych certyfikatów brakuje certyfikatu głównego, procesor komunikatów zgłasza ten wyjątek:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
i zwraca kod błędu
503 Service Unavailablemessaging.adaptors.http.flow.SslHandshakeFaileddo aplikacji klienckich.
- Certyfikat wierzchołka ścieżki:
Rozdzielczość
- Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.
- Jeśli jesteś użytkownikiem chmury publicznej, postępuj zgodnie z instrukcjami w artykule Aktualizowanie certyfikatu TLS w chmurze, aby zaktualizować certyfikat w magazynie zaufania procesora wiadomości Apigee Edge.
- Jeśli jesteś użytkownikiem chmury prywatnej, postępuj zgodnie z instrukcjami w artykule Aktualizowanie certyfikatu protokołu TLS w chmurze prywatnej, aby zaktualizować certyfikat w magazynie zaufanych certyfikatów procesora komunikatów Apigee Edge.
Przyczyna: niezgodność pełnej i jednoznacznej nazwy domeny w certyfikacie serwera backendu z nazwą hosta w docelowym punkcie końcowym
Jeśli serwer backendu przedstawi łańcuch certyfikatów zawierający pełną i jednoznaczną nazwę domeny, która nie jest zgodna z nazwą hosta podaną w docelowym punkcie końcowym, procesor wiadomości Apigee Edge zwróci błąd 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.
Diagnostyka
- Sprawdź konkretny punkt końcowy docelowy w proxy interfejsu API, w którym występuje ten błąd, i zanotuj nazwę hosta serwera backendu:
Przykładowy element TargetEndpoint:
<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.company.com/resource</URL> </HTTPTargetConnection> </TargetEndpoint>W przykładzie powyżej nazwa hosta serwera backendu to
backend.company.com. Określ w certyfikacie serwera backendu w pełni kwalifikowaną nazwę domeny za pomocą polecenia
openssl, jak pokazano poniżej:openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
Na przykład:
openssl s_client -connect backend.company.com:443
Sprawdź sekcję
Certificate chaini zwróć uwagę na w pełni kwalifikowaną nazwę domeny podaną jako część CN w temacie certyfikatu liścia.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 R1W powyższym przykładzie pełna i jednoznaczna nazwa serwera backendu to
backend.apigee.net.- Jeśli nazwa hosta serwera backendu uzyskana w kroku 1 i w pełni kwalifikowana nazwa domeny uzyskana w kroku 2 nie są zgodne, to jest to przyczyną błędu.
- W omówionym powyżej przykładzie nazwa hosta w docelowym punkcie końcowym to
backend.company.com. Jednak nazwa FQDN w certyfikacie serwera backendu tobackend.apigee.net. Ponieważ nie są one identyczne, pojawia się ten błąd.
Rozdzielczość
Możesz rozwiązać ten problem, korzystając z jednej z tych metod:
Prawidłowa pełna i jednoznaczna nazwa domeny
Zaktualizuj magazyn kluczy serwera backendu, podając prawidłową pełną i jednoznaczną nazwę domeny oraz ważny i kompletny łańcuch certyfikatów:
- Jeśli nie masz certyfikatu serwera backendu z prawidłową nazwą FQDN, uzyskaj odpowiedni certyfikat od właściwego urzędu certyfikacji.
Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.
- Gdy będziesz mieć prawidłowy i kompletny łańcuch certyfikatów z prawidłową pełną i jednoznaczną nazwą domeny serwera backendu w certyfikacie liścia lub encji, która jest identyczna z nazwą hosta podaną w docelowym punkcie końcowym, zaktualizuj magazyn kluczy backendu za pomocą kompletnego łańcucha certyfikatów.
Poprawny serwer backendu
Zaktualizuj punkt końcowy docelowy, podając prawidłową nazwę hosta serwera backendu:
- Jeśli nazwa hosta została nieprawidłowo określona w docelowym punkcie końcowym, zaktualizuj docelowy punkt końcowy, aby zawierał prawidłową nazwę hosta zgodną z w pełni kwalifikowaną nazwą domeny w certyfikacie serwera backendu.
Zapisz zmiany w proxy interfejsu API.
W omówionym powyżej przykładzie, jeśli nazwa hosta serwera backendu została nieprawidłowo określona, możesz to naprawić, używając pełnej i jednoznacznej nazwy domeny z certyfikatu serwera backendu, czyli
backend.apigee.net, w ten sposób:<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.apigee.net/resource</URL> </HTTPTargetConnection> </TargetEndpoint>
Przyczyna: nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów przedstawiony przez serwer backendu
Diagnostyka
- Pobierz łańcuch certyfikatów serwera backendu, wykonując polecenie
opensslw odniesieniu do nazwy hosta serwera backendu w ten sposób:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Zanotuj wartość
Certificate chainz danych wyjściowych powyższego polecenia.Przykładowy łańcuch certyfikatów serwera backendu z wyniku polecenia openssl:
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 - Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów, zgodnie z opisem w sekcji Weryfikowanie łańcucha certyfikatów.
Jeśli nie masz prawidłowego i kompletnego łańcucha certyfikatów serwera backendu, to jest to przyczyna tego problemu.
W przykładowym łańcuchu certyfikatów serwera backendu pokazanym powyżej brakuje certyfikatu głównego. Dlatego pojawia się ten błąd.
Rozdzielczość
Zaktualizuj magazyn kluczy serwera backendu o prawidłowy i kompletny łańcuch certyfikatów:
Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.
- Zaktualizuj prawidłowy i kompletny łańcuch certyfikatów w magazynie kluczy serwera backendu.
Jeśli problem nadal występuje, przejdź do sekcji Musisz zebrać informacje diagnostyczne.
musi zbierać informacje diagnostyczne;
Jeśli problem nadal występuje po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge:
- Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa proxy interfejsu API
- Wykonaj polecenie
curl, aby odtworzyć błąd - Plik śledzenia z błędem
Dane wyjściowe polecenia
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#- Pakiety TCP/IP przechwycone na serwerze backendu
- Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Pełny komunikat o błędzie
- pakiet proxy interfejsu API,
- Plik śledzenia z błędem
- Dzienniki procesora komunikatów
/opt/apigee/var/log/edge-message-processor/logs/system.log - Wynik polecenia
openssl:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_# - Pakiety TCP/IP przechwycone na serwerze backendu lub w procesorze komunikatów.
- Dane wyjściowe interfejsu API Pobierz wszystkie certyfikaty z magazynu kluczy lub magazynu zaufanych certyfikatów, a także szczegóły każdego certyfikatu uzyskane za pomocą interfejsu API Pobierz szczegóły certyfikatu z magazynu kluczy lub magazynu zaufanych certyfikatów.
Odniesienia
- Certyfikat łańcucha zaufania
- Polecenie OpenSSL