Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
W odpowiedzi na wywołania interfejsu API aplikacja kliencka otrzymuje kod stanu HTTP 503 Service Unavailable
z kodem błędu messaging.adaptors.http.flow.SslHandshakeFailed
.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 503 Service Unavailable
Oprócz tego może pojawić się 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
W wyniku błędu podczas uzgadniania połączenia SSL między procesorem wiadomości Apigee Edge a serwerem backendu możesz otrzymać kod stanu 503 Service Unavailable
z kodem błędu messaging.adaptors.http.flow.SslHandshakeFailed
. Komunikat o błędzie w pliku faultstring
zazwyczaj wskazuje możliwą dużą przyczynę tego błędu.
W zależności od komunikatu o błędzie zaobserwowanego w faultstring
musisz użyć odpowiednich metod, aby rozwiązać problem. Z tego poradnika dowiesz się, jak rozwiązać ten problem, gdy w interfejsie faultstring
zobaczysz komunikat o błędzie 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
.
Ten błąd występuje podczas procesu uzgadniania połączenia SSL między procesorem wiadomości Apigee Edge a serwerem backendu:
- Jeśli magazyn danych truststore procesora wiadomości 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 przedstawia serwer backendu:
- Zawiera pełną i jednoznaczną nazwę domeny (FQDN), która nie pasuje do nazwy hosta podanej w docelowym punkcie końcowym
- Zawiera nieprawidłowy lub niepełny łańcuch certyfikatów
Możliwe przyczyny tego problemu:
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Nieprawidłowy lub niekompletny certyfikat albo łańcuch certyfikatów w magazynie zaufania podmiotu przetwarzającego wiadomości | Certyfikat lub jego łańcuch przechowywany w magazynie zaufania procesora wiadomości Apigee Edge nie pasuje do łańcucha certyfikatów serwera backendu lub nie zawiera pełnego łańcucha certyfikatów serwera backendu. | Użytkownicy chmury prywatnej i publicznej 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 niezgodną z nazwą hosta określoną w docelowym punkcie końcowym. | Użytkownicy chmury prywatnej i publicznej Cloud |
Nieprawidłowy lub niekompletny certyfikat albo łańcuch certyfikatów przedstawiony przez serwer backendu | Łańcuch certyfikatów przedstawiany przez serwer backendu jest nieprawidłowy lub niekompletny. | Użytkownicy chmury prywatnej i publicznej Cloud |
Najczęstsze kroki diagnostyki
Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub metod:
Monitorowanie interfejsów API
Procedura 1. Korzystanie z monitorowania interfejsów 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 interfejsów API > Zbadaj.
- Wybierz przedział czasu, w którym zaobserwowano błędy.
Porównaj kod błędu z czasem.
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.SslHandshakeFailed
są wyświetlane jak poniżej:Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zwróć uwagę na te informacje:
- Identyfikator wiadomości żądania
- Kod stanu:
503
- Źródło błędu:
target
- Kod błędu:
messaging.adaptors.http.flow.SslHandshakeFailed
Trace
Procedura 2. Korzystanie z narzędzia do śledzenia
Aby zdiagnozować błąd za pomocą narzędzia do śledzenia:
- Włącz sesję śledzenia i
- Poczekaj na wystąpienie błędu
503 Service Unavailable
z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed
lub - Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby go odtworzyć.
503 Service Unavailable
- Poczekaj na wystąpienie błędu
Sprawdź, czy opcja Show all FlowInfos (Pokaż wszystkie informacje) jest włączona:
- Wybierz 1 z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsce błędu.
Błąd pojawia się zwykle po fazie rozpoczęcia przepływu żądania docelowego, jak pokazano poniżej:
- Zapisz te wartości ze logu czasu:
- 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 target
wskazuje, że uzgadnianie połączenia SSL nie powiodło się, ponieważ procesor wiadomości Apigee Edge nie był w stanie zweryfikować certyfikatu serwera backendu.
- błąd:
- Przejdź do fazy AX (rejestrowane dane Analytics) w logu czasu i kliknij ją.
Przewiń w dół do sekcji Nagłówki błędów szczegółów i ustal wartości X-Apigee-fault-code, X-Apigee-fault-source oraz X-Apigee-Message-ID, jak pokazano poniżej:
- Zapisz 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. Używanie dzienników dostępu NGINX
Aby zdiagnozować błąd przy użyciu logów dostępu NGINX:
- Jeśli jesteś użytkownikiem Private Cloud, możesz użyć logów dostępu NGINX do określenia kluczowych informacji o HTTP
503 Service Unavailable
. Sprawdź logi dostępu do NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Sprawdź, czy występują jakieś błędy
503
z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed
w danym czasie (jeśli problem wystąpił w przeszłości) lub czy są jakieś żądania, które nadal kończą się niepowodzeniem z503
. Jeśli znajdziesz błędy
503
z kodem X-Apigee-fault-code pasującym do wartościmessaging.adaptors.http.flow.SslHandshakeFailed
, sprawdź wartość źródła błędów X-Apigee.Przykładowy błąd 503 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX ma następujące wartości kodu X-Apigee-fault-code i X-Apigee-fault-code :
nagłówków, Wartość X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
X-Apigee-fault-source target
Logi procesora wiadomości
Procedura 4. Używanie dzienników procesora wiadomości
- Ustal identyfikator wiadomości jednego z nieudanych żądań za pomocą monitorowania interfejsu API, narzędzia do śledzenia lub logów dostępu NGINX zgodnie z opisem w częstych krokach diagnostyki.
Wyszukaj identyfikator komunikatu żądania w logu procesora wiadomości (
/opt/apigee/var/log/edge-message-processor/logs/system.log
). Możesz zobaczyć taki błąd: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 problemPowyższy błąd oznacza, że nie udało się uzgadniać połączenia SSL między procesorem wiadomości a serwerem backendu.
Po tym pojawi się wyjątek ze szczegółowym zrzutem stosu, jak pokazano poniżej:
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>Przyczyny błędu uzgadniania połączenia:
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Wskazuje to, że uzgadnianie połączenia SSL nie powiodło się, ponieważ procesor wiadomości Apigee Edge nie był w stanie zweryfikować certyfikatu serwera backendu.
Przyczyna: nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów w magazynie zaufania podmiotu przetwarzającego wiadomości
Diagnostyka
- Znajdź kod błędu, źródło błędu dla błędu zaobserwowanego przy użyciu logów dostępu API Monitoring, narzędzia do śledzenia lub NGINX zgodnie z opisem w częstych krokach diagnostyki.
- 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ź plik error.cause za pomocą narzędzia do śledzenia zgodnie z opisem w sekcji Typowe czynności diagnostyczne
- Znajdź wyjątek za pomocą logów procesora wiadomości, zgodnie z opisem w częstych krokach diagnostyki.
- Znajdź
faultstring
w odpowiedzi na żądanie błędu w odpowiedzi na wywołanie interfejsu API, tak jak w Komunikatu o błędzie. - Jeśli komunikat o błędzie to
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 połączenia SSL nie powiodło się, ponieważ procesor wiadomości Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.
Ten problem możesz debugować w 2 etapach:
- Faza 1. Określ łańcuch certyfikatów serwera backendu
- Etap 2. Porównaj łańcuch certyfikatów przechowywany w magazynie zaufania podmiotu przetwarzającego wiadomości
Faza 1
Faza 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
względem nazwy hosta 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 opensl:
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 Private Cloud, możesz przechwytywać pakiety TCP/IP na serwerze backendu lub procesorze wiadomości. Najlepiej przechwytywać je na serwerze backendu, gdy pakiety są odszyfrowywane na serwerze backendu.
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ą dobrze znanego narzędzia Wireshark lub podobnego.
Przykładowa analiza narzędzia Tcpdump
- Pakiet 43: podmiot przetwarzający wiadomości (źródło) wysłał komunikat
Client Hello
do serwera backendu (miejsce docelowe). - Pakiet 44: serwer backendu potwierdza odbiór komunikatu
Client Hello
z procesora wiadomości. - Pakiet 45: serwer backendu wysyła komunikat
Server Hello
wraz z certyfikatem. - Pakiet 46: podmiot przetwarzający wiadomości potwierdza odbiór komunikatu
Server Hello
i certyfikatu. Pakiet 47: procesor wiadomości wysyła komunikat
FIN, ACK
, a po nimRST, ACK
w pakiecie 48.Wskazuje to, że weryfikacja certyfikatu serwera backendu przez procesor wiadomości nie powiodła się. Wynika to z tego, że procesor wiadomości nie ma żadnego certyfikatu zgodnego z certyfikatem serwera backendu lub nie może zaufać certyfikatowi serwera backendu certyfikatom dostępnym w jego magazynie zaufania (Message Processor).
Możesz wrócić i sprawdzić pakiet nr 45, aby określić łańcuch certyfikatów wysłany przez serwer backendu
- W tym przykładzie widać, że serwer wysłał certyfikat liścia z
common name (CN) = mocktarget.apigee.net
, a po nim certyfikat pośredni (CN= GTS CA 1D4
) i certyfikat główny zCN = GTX Root R1
.
Jeśli masz pewność, że weryfikacja certyfikatu serwera się nie powiodła, przejdź do Fazy 2. Porównaj certyfikat i certyfikaty serwera backendu przechowywane w magazynie zaufania podmiotu przetwarzającego wiadomości.
- Pakiet 43: podmiot przetwarzający wiadomości (źródło) wysłał komunikat
Faza 2
Etap 2. Porównaj certyfikat serwera backendu i certyfikaty zapisane w magazynie zaufania procesora wiadomości
- Określ łańcuch certyfikatów serwera backendu.
- Aby określić certyfikat zapisany w magazynie zaufania podmiotu przetwarzającego wiadomości, wykonaj te czynności:
Pobierz nazwę odwołania do magazynu zaufania z elementu
TrustStore
w sekcjiSSLInfo
wTargetEndpoint
.Przyjrzyjmy się przykładowej sekcji
SSLInfo
w konfiguracjiTargetEndpoint
:<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 tym przykładzie nazwa odniesienia do
TrustStore
tomyCompanyTruststoreRef
. W interfejsie użytkownika Edge wybierz Środowiska > Materiały referencyjne. Zapisz nazwę w kolumnie Dokumentacja, aby znaleźć konkretne odwołanie do magazynu zaufania. Będzie to nazwa magazynu zaufania.
W powyższym przykładzie nazwa magazynu zaufanych certyfikatów to:
myCompanyTruststoreRef:
myCompanyTruststore
Pobierz certyfikaty zapisane w magazynie zaufania (określone w poprzednim kroku) przy użyciu tych interfejsów API:
Pobierz wszystkie certyfikaty z magazynu kluczy lub magazynu zaufanych. Ten interfejs API zawiera listę wszystkich certyfikatów w określonym magazynie zaufania.
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
- Parametr $TOKEN jest ustawiony na token dostępu OAuth 2.0 zgodnie z opisem w sekcji Uzyskiwanie tokena dostępu OAuth 2.0
- Opcje
curl
użyte w tym przykładzie są opisane w sekcji Użycie curl
Przykładowe wyniki:
Certyfikaty z przykładowego magazynu zaufania
myCompanyTruststore
to:[ "serverCert" ]
-
Pobierz szczegóły certyfikatu dla konkretnego certyfikatu z magazynu kluczy lub Truststore
Ten interfejs API zwraca informacje o konkretnym certyfikacie w określonym magazynie zaufania.
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 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
- Parametr $TOKEN jest ustawiony na token dostępu OAuth 2.0 zgodnie z opisem w sekcji Uzyskiwanie tokena dostępu OAuth 2.0
- Opcje
curl
użyte w tym przykładzie są opisane w sekcji Użycie curl
Przykładowe dane wyjściowe
Szczegóły dotyczące
serverCert
zawierają temat i wydawcę: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 zapisany w magazynie zaufania uzyskany w kroku 3 są zgodne. Jeśli nie, to jest przyczyną problemu.
Na podstawie powyższego przykładu przeanalizujmy tylko jeden certyfikat:
- Certyfikat liścia:
Z serwera backendu:
s:/CN=mocktarget.apigee.net i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
W magazynie zaufania podmiotu przetwarzającego 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 zaufania 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
W magazynie zaufania podmiotu przetwarzającego 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 zaufania 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 zaufania podmiotu przetwarzającego wiadomości w ogóle nie ma certyfikatu głównego.
Ponieważ w magazynie zaufania brakuje certyfikatu głównego, podmiot przetwarzający wiadomości 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 do aplikacji klienckich
503 Service Unavailable
z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed
.
- Certyfikat liścia:
Rozdzielczość
- Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.
- Jeśli jesteś użytkownikiem chmury publicznej, wykonaj instrukcje opisane w artykule Aktualizowanie certyfikatu TLS dla chmury, aby zaktualizować certyfikat do magazynu zaufanych certyfikatów Apigee Edge.
- Jeśli jesteś użytkownikiem Private Cloud, wykonaj instrukcje opisane w artykule Aktualizowanie certyfikatu TLS dla chmury prywatnej, aby zaktualizować certyfikat do magazynu zaufanych certyfikató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 prezentuje łańcuch certyfikatów zawierający pełną i jednoznaczną nazwę domeny, która nie jest zgodna z nazwą hosta określoną w docelowym punkcie końcowym, proces przesyłania wiadomości Apigee Edge zwraca 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 docelowy punkt końcowy na serwerze proxy interfejsu API, w którym zaobserwujesz ten błąd, i zanotuj nazwę hosta serwera backendu:
Przykładowy punkt końcowy:
<TargetEndpoint name="default"> … <HTTPTargetConnection> <Properties /> <SSLInfo> <Enabled>true</Enabled> <TrustStore>ref://myTrustStoreRef</TrustStore> </SSLInfo> <URL>https://backend.company.com/resource</URL> </HTTPTargetConnection> </TargetEndpoint>
W tym przykładzie nazwa hosta serwera backendu to
backend.company.com
. Określ pełną i jednoznaczną nazwę domeny w certyfikacie serwera backendu za pomocą polecenia
openssl
w następujący sposób:openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
Na przykład:
openssl s_client -connect backend.company.com:443
Zapoznaj się z sekcją
Certificate chain
i zanotuj pełną i jednoznaczną nazwę domeny podaną jako część CN w temacie certyfikatu liścia.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 R1W tym przykładzie pełna i jednoznaczna nazwa domeny serwera backendu to
backend.apigee.net
.- Jeśli nazwa hosta serwera backendu uzyskana w kroku 1 i pełna i jednoznaczna nazwa domeny uzyskana w kroku 2 nie jest zgodna, to jest przyczyną błędu.
- W podanym wyżej przykładzie nazwa hosta w docelowym punkcie końcowym to
backend.company.com
. Jednak pełną i jednoznaczną nazwą domeny w certyfikacie serwera backendu jestbackend.apigee.net
. Ponieważ nie są one takie same, pojawia się ten błąd.
Rozdzielczość
Aby rozwiązać ten problem, wykonaj jedną z tych czynności:
Prawidłowa pełna i jednoznaczna nazwa domeny
Zaktualizuj magazyn kluczy serwera backendu, podając prawidłową pełną i jednoznaczną nazwę domeny oraz prawidłowy i pełny łańcuch certyfikatów:
- Jeśli nie masz certyfikatu serwera backendu z prawidłową pełną i jednoznaczną nazwą domeny, kup odpowiedni certyfikat z odpowiedniego urzędu certyfikacji.
Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.
- Gdy będziesz mieć prawidłowy i pełny łańcuch certyfikatów z prawidłową pełną i jednoznaczną nazwą domeny serwera backendu w certyfikacie liścia lub jednostki identyczną z nazwą hosta określoną w docelowym punkcie końcowym, zaktualizuj magazyn kluczy backendu, podając pełny łańcuch certyfikatów.
Prawidłowy serwer backendu
Zaktualizuj docelowy punkt końcowy, 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 tak, aby miał prawidłową nazwę hosta zgodną z pełną i jednoznaczną nazwą domeny w certyfikacie serwera backendu.
Zapisz zmiany w serwerze proxy interfejsu API.
Jeśli w omówionym powyżej przykładzie nazwa hosta serwera backendu jest nieprawidłowo określona, możesz rozwiązać ten problem, 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 albo łańcuch certyfikatów przedstawiany przez serwer backendu
Diagnostyka
- Pobierz łańcuch certyfikatów serwera backendu, wykonując polecenie
openssl
dla nazwy hosta serwera backendu w ten sposób:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Zwróć uwagę na
Certificate chain
w danych wyjściowych powyższego polecenia.Przykładowy łańcuch certyfikatów serwera backendu z wyniku polecenia opensl:
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 - 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 pełnego łańcucha certyfikatów serwera backendu, to jest przyczyną tego problemu.
W podanym powyżej łańcuchu certyfikatów serwera backendu brakuje certyfikatu głównego. Dlatego pojawia się ten błąd.
Rozdzielczość
Zaktualizuj magazyn kluczy serwera backendu, podając 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 pełny łańcuch certyfikatów w magazynie kluczy serwera backendu.
Jeśli problem nadal występuje, przejdź do artykułu Musisz zebrać informacje diagnostyczne.
Musisz zebrać informacje diagnostyczne
Jeśli problem nie ustąpi mimo wykonania powyższych instrukcji, zbierz poniższe 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 serwera proxy interfejsu API
- Wykonaj polecenie
curl
, aby odtworzyć błąd - Plik śledzenia pokazujący błąd
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:
- Zaobserwowano pełny komunikat o błędzie
- Pakiet proxy interfejsu API
- Plik śledzenia pokazujący błąd
- Procesor wiadomości loguje
/opt/apigee/var/log/edge-message-processor/logs/system.log
- Dane wyjściowe polecenia
openssl
:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
- Pakiety TCP/IP przechwycone na serwerze backendu lub procesorze wiadomości.
- Dane wyjściowe interfejsu API pobierania wszystkich certyfikatów dla magazynu kluczy lub zaufanego magazynu, a także szczegóły każdego certyfikatu uzyskanego za pomocą interfejsu API Pobierz szczegóły certyfikatu z magazynu kluczy lub Truststore.
Odniesienia
- Łańcuch zaufania certyfikatów
- Polecenie OpenSSL