Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje kod stanu HTTP 503 Service Unavailable
z parametrem
kod błędu messaging.adaptors.http.flow.SslHandshakeFailed
jako odpowiedź dla interfejsu API
połączeń.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 503 Service Unavailable
Możesz też zobaczyć następujący 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
Może pojawić się kod stanu 503 Service Unavailable
z kodem błędu
messaging.adaptors.http.flow.SslHandshakeFailed
z powodu awarii protokołu SSL
procesu uzgadniania połączenia między procesorem komunikatów Apigee Edge a serwerem backendu dla pewnej liczby
. Komunikat o błędzie w faultstring
zwykle wskazuje
możliwej głównej przyczyny, która doprowadziła do tego błędu.
W zależności od komunikatu o błędzie zaobserwowanego w faultstring
musisz użyć
za pomocą odpowiednich metod, aby rozwiązać problem. Z tego poradnika dowiesz się, jak rozwiązać problemy
ten błąd, jeśli widzisz 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
w pliku faultstring
.
Ten błąd występuje podczas uzgadniania połączenia SSL między procesorem wiadomości Apigee Edge a serwer backendu:
- Jeśli magazyn zaufania procesora wiadomości Apigee Edge:
- Zawiera łańcuch certyfikatów, który nie jest zgodny z pełnym łańcuchem na serwerze backendu łańcuch certyfikatów LUB
- Nie zawiera pełnego łańcucha certyfikatów serwera backendu
- Jeśli łańcuch certyfikatów przedstawiony przez serwer backendu:
- Zawiera Pełna i jednoznaczna nazwa domeny (FQDN), która nie jest zgodna z nazwą hosta określoną w polu docelowy punkt końcowy
- 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/niekompletny certyfikat lub ł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 na serwerze backendu lub nie zawiera pełnego łańcucha certyfikatów serwera backendu. | Użytkownicy Edge Private Cloud i użytkownicy chmury publicznej |
Niezgodność pełnej i jednoznacznej nazwy domeny w certyfikacie serwera backendu i nazwę hosta w docelowym punkcie końcowym | Certyfikat przedstawiany przez serwer backendu zawiera pełną i jednoznaczną nazwę domeny, która nie jest zgodna z nazwą hosta określoną w docelowym punkcie końcowym. | Użytkownicy Edge Private Cloud i użytkownicy chmury publicznej |
Nieprawidłowy/niekompletny certyfikat lub łańcuch certyfikatów przedstawiony przez serwer backendu | Łańcuch certyfikatów przedstawiony przez serwer backendu jest nieprawidłowy lub niekompletny. | Użytkownicy Edge Private Cloud i użytkownicy chmury publicznej |
Typowe kroki diagnostyki
Użyj jednego z tych narzędzi lub metod, aby zdiagnozować ten błąd:
Monitorowanie interfejsów API
Procedura 1. Korzystanie z monitorowania interfejsów API
Aby zdiagnozować błąd za pomocą monitorowania interfejsów API:
- Zaloguj się w interfejsie Apigee Edge jako użytkownik z uprawnieniami odpowiednią rolę.
Przełącz się na organizację, w której chcesz zbadać problem.
- Przejdź do przycisku Analiza > Monitorowanie interfejsów API > Zbadaj stronę.
- Wybierz okres, w którym zaobserwowano błędy.
Porównaj Kod błędu z czasem.
Wybierz komórkę, która zawiera kod błędu
messaging.adaptors.http.flow.SslHandshakeFailed
jak pokazano na ekranie poniżej:Informacje o kodzie błędu
messaging.adaptors.http.flow.SslHandshakeFailed
jest wyświetlany jako poniżej:Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.
- W oknie Logi zwróć uwagę na te informacje:
- Request Message ID (Identyfikator wiadomości żądania)
- Kod stanu:
503
- Źródło błędu:
target
- Kod błędu:
messaging.adaptors.http.flow.SslHandshakeFailed
Śledzenie
Procedura 2. Używanie narzędzia śledzenia
Aby zdiagnozować błąd za pomocą narzędzia śledzenia:
- Włącz sesję śledzenia i wykonaj jedną z tych czynności:
- Poczekaj na pojawienie się 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 odtworzyć problem.
503 Service Unavailable
- Poczekaj na pojawienie się błędu
Sprawdź, czy opcja Show all FlowInfos jest włączona:
- Wybierz jedno z nieudanych żądań i sprawdź log czasu.
- Przejdź przez różne fazy śledzenia i znajdź miejsca, w których wystąpił błąd.
Błąd pojawia się zwykle po etapie Rozpoczęto docelowy przepływ żądań jak poniżej:
- Zanotuj 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
oznacza, że uzgadnianie połączenia SSL nie powiodło się. ponieważ procesor komunikatów Apigee Edge nie mógł sprawdzić poprawności certyfikat.
- błąd:
- Przejdź do fazy AX (zarejestrowane dane Analytics) i kliknij ją.
Przewiń w dół do sekcji Phase Details Error Headers (Nagłówki błędów szczegółów etapu) i określ wartości X-Apigee-fault-code i X-Apigee-fault-source; X-Apigee-Message-ID zgodnie z poniższym przykładem:
- Zwróć uwagę na 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 logó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, aby określić
Kluczowe informacje o HTTP
503 Service Unavailable
. Sprawdź logi dostępu NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Wyszukaj błędy (
503
) z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed
w określonym czasie (jeśli problem wystąpił w wcześniejsze) lub jeśli jakieś żądania z usługą503
nadal kończą się niepowodzeniem. Jeśli znajdziesz błędy
503
przy dopasowaniu X-Apigee-fault-code wartośćmessaging.adaptors.http.flow.SslHandshakeFailed
, a następnie określić wartość źródła X-Apigee-fault-source..Przykładowy błąd 503 z dziennika dostępu NGINX:
Powyższy przykładowy wpis z logu dostępu NGINX zawiera następujące wartości dla: X-Apigee-fault-code i X-Apigee-fault-code
Nagłówki Wartość X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
X-Apigee-fault-source target
Logi procesora wiadomości
Procedura 4. Korzystanie z logów procesora wiadomości
- Ustal identyfikator wiadomości jednego z nieudanych żądań za pomocą monitorowania interfejsów API, narzędzia do śledzenia lub logów dostępu NGINX. Więcej informacji znajdziesz w sekcji Typowe kroki diagnostyki.
Wyszukaj identyfikator wiadomości z określonym żądaniem w dzienniku procesora wiadomości (
/opt/apigee/var/log/edge-message-processor/logs/system.log
). Możesz zaobserwować ten 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ę nawiązać połączenia SSL między procesorem wiadomości i serwer backendu.
Po tym czasie będzie miał wyjątek ze szczegółowym zrzutem stosu, jak 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>Pamiętaj, że niepowodzenie uzgadniania połączenia może mieć następujące przyczyny:
Caused by: 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 nie udało się uzgadniać połączenia SSL, ponieważ procesor komunikatów Apigee Edge nie udało się zweryfikować certyfikatu serwera backendu.
Przyczyna: nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów w magazynie zaufania podmiotu przetwarzającego wiadomości
Diagnostyka
- Określ kod błędu i źródło błędu dla błędu zaobserwowanego za pomocą interfejsu API. Logi monitorowania, narzędzia śledzenia lub logi dostępu NGINX zgodnie z opisem w sekcji Często używane i diagnozowania.
- Jeśli kod błędu to
messaging.adaptors.http.flow.SslHandshakeFailed
, określić komunikat o błędzie, korzystając z jednej z tych metod: - Znajdź plik error.cause za pomocą narzędzia śledzenia zgodnie z opisem w artykule Najczęstsze czynności diagnostyczne
- Znajdź wyjątek za pomocą dzienników procesora wiadomości, zgodnie z opisem w sekcji Najczęstsze czynności diagnostyczne
- Znajdź
faultstring
w odpowiedzi na błąd w wywołaniu interfejsu API, jak widać tutaj Komunikat 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 wystąpił błąd, ponieważ procesor komunikatów Apigee Edge nie mógł sprawdzić poprawności certyfikat.
Debugowanie tego problemu można przeprowadzić w 2 etapach:
- Etap 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
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
nazwa w następujący sposób:
openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#
Zapisz łańcuch certyfikatów w danych wyjściowych powyższego polecenia:
Przykładowy łańcuch certyfikatów serwera backendu z danych wyjściowych 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 Public Cloud Cloud, przechwyć pakiety TCP/IP w interfejsie z serwera backendu.
- Jeśli jesteś użytkownikiem Private Cloud, możesz przechwytywać porty TCP/IP na serwerze backendu lub w procesorze wiadomości. Najlepiej jest zarejestrować je na serwera backendu, ponieważ na serwerze backendu są odszyfrowywane pakiety.
Użyj następujących Polecenie tcpdump w celu przechwycenia pakietów TCP/IP:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
Przeanalizuj pakiety TCP/IP przy użyciu Wireshark lub podobne narzędzie, które już znasz.
Przykładowa analiza Tcpdump
- Pakiet 43: procesor wiadomości (źródło) wysłał
Client Hello
wiadomość do serwera backendu (miejsce docelowe). - Pakiet 44: serwer backendu potwierdza odbiór
Client Hello
wiadomość z procesora wiadomości. - Pakiet 45: serwer backendu wysyła
Server Hello
wraz z certyfikatem. - Pakiet 46: procesor wiadomości potwierdza odbiór
Server Hello
wiadomość i certyfikat. Pakiet 47: procesor wiadomości wysyła
FIN, ACK
wiadomość, a po niejRST, ACK
w pakiecie nr 48.Wskazuje to, że weryfikacja certyfikatu serwera backendu przez Błąd procesora wiadomości. Dzieje się tak, ponieważ procesor wiadomości nie dowolny certyfikat, który pasuje do certyfikatu serwera backendu lub nie można zaufać certyfikatu serwera backendu z certyfikatami dostępnymi w jego (Truststore) usługi przetwarzania wiadomości.
Możesz się cofnąć i przejrzeć Pakiet 45 i określić certyfikat łańcuch wysłany przez serwer backendu
- W tym przykładzie widać, że serwer wysłał certyfikat liścia
ze znakiem
common name (CN) = mocktarget.apigee.net
, a po nim znakiem certyfikat pośredni zCN= GTS CA 1D4
i certyfikatem głównym dzięki funkcjiCN = GTX Root R1
.
Jeśli masz pewność, że weryfikacja certyfikatu serwera nie powiodła się, przejdź do Etapu 2. Porównaj certyfikat serwera backendu i certyfikatów zapisanych w magazynie zaufania podmiotu przetwarzającego wiadomości.
- Pakiet 43: procesor wiadomości (źródło) wysłał
Faza 2
Etap 2. Porównaj certyfikaty serwera backendu oraz certyfikaty przechowywane w Truststore procesora wiadomości
- Określ łańcuch certyfikatów serwera backendu.
- Określ certyfikat przechowywany w magazynie zaufania podmiotu przetwarzającego wiadomości za pomocą
te kroki:
Pobierz nazwę referencyjną magazynu zaufania z elementu
TrustStore
w sekcjiSSLInfo
wTargetEndpoint
.Spójrzmy na przykładową sekcję
SSLInfo
wTargetEndpoint
. Konfiguracja:<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
TrustStore
tomyCompanyTruststoreRef
W interfejsie Edge wybierz Środowiska > Pliki referencyjne. Zapisz nazwę w Kolumna Odniesienie do konkretnej odwołania do magazynu zaufania. To będzie Twój nazwę magazynu zaufania.
W tym przykładzie nazwa magazynu zaufania to:
myCompanyTruststoreRef:
myCompanyTruststore
Pobierz certyfikaty zapisane w magazynie zaufania (określone w poprzednim kroku) przy użyciu następujących interfejsów API:
Pobieranie wszystkich certyfikatów magazynu kluczy lub magazynu zaufania Ten interfejs API zawiera listę wszystkich certyfikatów w określonym magazynie zaufania.
Użytkownik Public 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"
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
- $TOKEN jest ustawiony na Twój token dostępu OAuth 2.0 zgodnie z opisem w Uzyskiwanie tokena dostępu OAuth 2.0
- Opcje
curl
użyte w tym przykładzie zostały opisane tutaj: Użyj curl
Przykładowe wyniki:
Certyfikaty z przykładowego magazynu zaufania
myCompanyTruststore
:[ "serverCert" ]
-
Uzyskaj szczegóły certyfikatu konkretnego certyfikatu z magazynu kluczy lub Truststore.
Ten interfejs API zwraca informacje o konkretnym certyfikacie w sekcji
magazynu zaufania.
Użytkownik Public 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"
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
- $TOKEN jest ustawiony na Twój token dostępu OAuth 2.0 zgodnie z opisem w Uzyskiwanie tokena dostępu OAuth 2.0
- Opcje
curl
użyte w tym przykładzie zostały opisane tutaj: Użyj curl
Przykładowe dane wyjściowe
Szczegóły etykiety
serverCert
wyświetlają się w następujący sposób:Certyfikat liścia/jednostki:
"subject": "CN=mocktarget.apigee.net", "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
Certyfikat średniozaawansowany:
"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 certyfikat serwera uzyskany w kroku 1 oraz certyfikat przechowywanych w magazynie zaufania uzyskanym w kroku 3. Jeśli nazwy się nie zgadzają, jest to przyczyna problemu.
Na podstawie przykładu powyżej sprawdźmy po jednym certyfikacie naraz:
- 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 backendu serwera.
- Certyfikat średniozaawansowany:
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 z 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 procesorze wiadomości brakuje w pełni certyfikatu głównego magazynu zaufania.
Ponieważ w magazynie zaufania brakuje certyfikatu głównego, Procesor wiadomości zgłasza następujący 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
503 Service Unavailable
z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed
dla klienta aplikacji.
- Certyfikat liścia:
Rozdzielczość
- Sprawdź, czy serwer backendu masz prawidłowy i kompletny łańcuch certyfikatów.
- Jeśli jesteś użytkownikiem Public Cloud, wykonaj instrukcje opisane w Zaktualizuj certyfikat TLS dla chmury, aby zaktualizować certyfikat do Apigee Edge Magazyn zaufania podmiotu przetwarzającego wiadomości.
- Jeśli jesteś użytkownikiem Private Cloud, wykonaj czynności opisane w Zaktualizuj certyfikat TLS dla Private Cloud, aby zaktualizować certyfikat Magazyn zaufania procesora wiadomości 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 przedstawia łańcuch certyfikatów zawierający pełną i jednoznaczną nazwę domeny, która nie jest zgodna z
nazwa hosta określona w docelowym punkcie końcowym, proces komunikatów 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 API, w którym go obserwujesz
i zapisz nazwę hosta serwera backendu:
Przykładowy docelowy 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
. Pełna i jednoznaczna nazwa domeny jest określona w certyfikacie serwera backendu przy użyciu funkcji
openssl
jak poniżej: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 pełną nazwę domeny określoną jako stanowią 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 z kroku 1 oraz w pełni kwalifikowana nazwa domeny krok 2 nie pasuje do siebie, to to jest przyczyną błędu.
- W omówionym powyżej przykładzie nazwa hosta w docelowym punkcie końcowym to
backend.company.com
Jednak w pełni kwalifikowana nazwa domeny podana w certyfikacie serwera backendu jestbackend.apigee.net
. Ten błąd występuje, ponieważ nie pasują do siebie.
Rozdzielczość
Aby rozwiązać ten problem, użyj 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, prawidłowy i kompletny certyfikat łańcuch:
- Jeśli nie masz certyfikatu serwera backendu z prawidłową nazwą domeny, a potem kup odpowiedni certyfikat z odpowiedniego urzędu certyfikacji.
Potwierdź, że posiadasz poprawnego i pełnego łańcucha certyfikatów serwera backendu.
- Gdy masz już prawidłowy i kompletny łańcuch certyfikatów z prawidłową i pełną nazwą domeny serwer backendu w liściu lub w certyfikacie jednostki identycznym z nazwą hosta określonego w docelowym punkcie końcowym, zaktualizuj magazyn kluczy backendu za pomocą funkcji do pełnego łańcucha certyfikatów.
Prawidłowy serwer backendu
Zaktualizuj docelowy punkt końcowy, podając prawidłową nazwę hosta serwera backendu:
- Jeśli w docelowym punkcie końcowym nazwa hosta została błędnie określona, zaktualizuj parametr docelowy punkt końcowy tak, aby miał prawidłową nazwę hosta, która zgadza się z pełną i jednoznaczną nazwą domeny w backendzie certyfikat serwera.
Zapisz zmiany na serwerze proxy interfejsu API.
W omówionym powyżej przykładzie nazwa hosta serwera backendu była nieprawidłowa możesz go naprawić, używając pełnej i jednoznacznej nazwy domeny z certyfikatu serwera backendu. to
backend.apigee.net
w następujący 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 przedstawiony przez serwer backendu
Diagnostyka
- Pobierz łańcuch certyfikatów serwera backendu, wykonując polecenie
openssl
z nazwą hosta serwera backendu w następujący 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 danych wyjściowych 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 właściwy i kompletny łańcuch certyfikatów, zgodnie z opisem na stronie Weryfikuję łańcuch certyfikatów.
Jeśli nie masz prawidłowego i pełnego łańcucha certyfikatów serwera backendu, to jest przyczyną problemu.
W widocznym powyżej łańcuchu certyfikatów przykładowego serwera backendu certyfikat główny jest brak. W związku z tym występuje 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 kompletny łańcuch certyfikatów w magazynie kluczy serwera backendu.
Jeśli problem będzie nadal występował, wejdź na Musi zbierać informacje diagnostyczne.
Musi zbierać informacje diagnostyczne
Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zwróć uwagę na informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge:
- Jeśli jesteś użytkownikiem Public Cloud, 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 przez serwer backendu
- Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Zaobserwowano pełny komunikat o błędzie
- Pakiet serwerów proxy interfejsu API
- Plik śledzenia pokazujący błąd
- Logi procesora wiadomości
/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 przez serwer backendu lub procesor wiadomości.
- Dane wyjściowe Uzyskaj wszystkie certyfikaty dla interfejsu API magazynu kluczy lub zaufaniastore, a także szczegóły każdy certyfikat uzyskany za pomocą Uzyskaj szczegóły certyfikatu z interfejsu Keystore lub Truststore API.
Pliki referencyjne
- Certyfikat Łańcuch zaufania
- Polecenie OpenSSL