Przeglądasz dokumentację Apigee Edge.
Przejdź do
Dokumentacja Apigee X. informacje.
Krótki opis problemu
Aplikacja kliencka otrzymuje odpowiedź HTTP 400 – Nieprawidłowe żądanie z kodem komunikat „Błąd certyfikatu SSL”. Ten błąd jest zwykle wysyłany przez router brzegowy w dwukierunkowej konfiguracji TLS dla połączenia przychodzącego z Apigee Edge.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 400 Bad Request
A następnie poniższa strona błędu HTML:
<html> <head> <title>400 The SSL certificate error</title> </head> <body bgcolor="white"> <center> <h1>400 Bad Request</h1> </center> <center>The SSL certificate error</center> <hr> <center>nginx</center> </body> </html>
Możliwe przyczyny
Możliwe przyczyny tego problemu:
Przyczyna | Opis | Instrukcje dotyczące rozwiązywania problemów dotyczące |
Wygasł certyfikat klienta | Certyfikat wysłany przez klienta stracił ważność. | Użytkownicy Edge Private Cloud i użytkownicy chmury publicznej |
Nieprawidłowy certyfikat wysłany przez klienta | Ten błąd jest zgłaszany, jeśli certyfikat wysłany przez aplikację kliencką nie pasuje z certyfikatem przechowywanym w magazynie zaufania routera Edge. | Użytkownicy Edge Private Cloud i użytkownicy chmury publicznej |
Brak certyfikatu głównego klienta w Truststore | Ten błąd jest zgłaszany, jeśli w magazynu zaufania routera Edge. | Użytkownicy Edge Private Cloud i użytkownicy chmury publicznej |
Certyfikaty klienta nie zostały wczytane w routerze brzegowym | Ten błąd jest zgłaszany, jeśli certyfikaty klienta przesłane do magazynu zaufania nie zostały wczytane w routerze. | Użytkownicy Edge Private Cloud |
Przyczyna: certyfikat klienta wygasł
Ten problem występuje zwykle w przypadku dwukierunkowego protokołu TLS, gdy certyfikat wysłany przez klienta wygaśnie. W przypadku dwukierunkowej wymiany TLS zarówno klient, jak i serwer ich certyfikaty publiczne w celu uzgadniania połączenia. Klient weryfikuje certyfikat serwera. a serwer weryfikuje certyfikat klienta.
W Edge dwukierunkowe szyfrowanie TLS jest wdrożone na hostze wirtualnym. gdzie certyfikat serwera jest dodawany do magazynu kluczy, a certyfikat klienta – do magazynów zaufania.
Jeśli podczas uzgadniania połączenia TLS okaże się, że certyfikat klienta wygasł, serwer wyśle komunikat 400 – Bad request (Nieprawidłowe żądanie) z komunikatem „Błąd certyfikatu SSL”.
Diagnostyka
Zaloguj się w interfejsie Edge i wyświetl konkretną konfigurację hosta wirtualnego (Administracja > Hosty wirtualne), do których jest wysyłane żądanie do interfejsu API lub użyj interfejsu Get virtual host API Management API, aby uzyskać definicję konkretnego hosta wirtualnego.
Host wirtualny do dwukierunkowej komunikacji TLS wygląda zwykle tak:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>
Określ odwołanie do magazynu zaufania używane na hoście wirtualnym. W tym przykładzie nazwa odniesienia do magazynu zaufania to myTruststoreRef.
- Określ magazyn zaufania, do którego wskazywana jest odwołanie do magazynu zaufania.
- W interfejsie Edge otwórz Administracja > Środowiska > Przydatne materiały i wyszukaj nazwę referencyjną do magazynu zaufania.
Zanotuj nazwę w kolumnie Plik referencyjny dla konkretnej odwołania do Truststore. To będzie nazwa magazynu zaufania.
Zwróć uwagę, że w powyższym przykładzie myTruststoreRef zawiera odwołanie do: myTruststore. W związku z tym nazwa magazynu zaufania to myTruststore.
- W sekcji Administracja > Środowiska > Magazyny kluczy TLS w interfejsie Edge, przejdź do protokołu TLS. Magazyny kluczy i odszukaj magazyn Truststore znaleziony w kroku 3.
Wybierz certyfikat w określonej usłudze Truststore (określonej w kroku 3 powyżej), jak pokazano poniżej:
Certyfikat z aliasem
client-cert-markw
w powyższym przykładzie wskazuje, że wygasła.- Sprawdź, czy certyfikat dla aliasu certyfikatu magazynu zaufania nie wygasł.
- Jeśli certyfikat nie wygasł, przejdź do sekcji Typowe czynności diagnostyczne dotyczące innych przyczyn.
Rozdzielczość
Wygeneruj nowy certyfikat i prześlij certyfikat:
- Utwórz nowy magazyn zaufania, na przykład myNewTruststore.
- Prześlij nowy certyfikat do nowo utworzonego magazynu zaufania.
Zmodyfikuj odniesienie dotrustore używane w konkretnym hoście wirtualnym, tak aby wskazywało nowy , korzystając z instrukcji podanych w argumencie zaufania Modyfikowanie pliku referencyjnego
W przykładzie powyżej wskaż odniesienie do myTruststoreRef to myNewTruststore.
Typowe kroki diagnostyki innych przyczyn
- Aby zbadać ten problem, musisz przechwycić pakiety TCP/IP za pomocą protokołu
Narzędzie tcpdump.
- Jeśli jesteś użytkownikiem Private Cloud, możesz przechwytywać pakiety TCP/IP w interfejsie aplikacji klienckiej lub routera.
- Jeśli jesteś użytkownikiem Public Cloud, przechwyć pakiety TCP/IP w aplikacji klienckiej.
Gdy wybierzesz już miejsce, w którym chcesz przechwytywać pakiety TCP/IP, użyj tcpdump do przechwytywania pakietów TCP/IP:
tcpdump -i any -s 0 host <IP address> -w <File name>
Uwaga: jeśli odbierasz pakiety TCP/IP na routerze, użyj publiczny adres IP aplikacji klienckiej w poleceniu
tcpdump
.Jeśli pobierasz pakiety TCP/IP z aplikacji klienckiej, użyj publicznego adresu IP i adresu nazwy hosta używanej w hoście wirtualnym w poleceniu
tcpdump
.Więcej informacji znajdziesz w artykule tcpdump. .
- Analizuj pakiety TCP/IP zebrane za pomocą Wireshark lub podobne narzędzie, które już znasz.
Analiza przykładowych danych pakietów TCP/IP za pomocą narzędzia Wireshark:
- Pakiet nr 30 w pliku tcpdump (obraz poniżej) pokazuje, że aplikacja kliencka (źródłowa) wysłał komunikat „Client Hello” do routera (miejsca docelowego).
- Pakiet 34 pokazuje, że router potwierdził komunikat „Client Hello” z aplikacji klienckiej.
- Router wysyła komunikat „Server Hello”. w pakiecie nr 35, a następnie wysyła jego certyfikat oraz żąda od aplikacji klienckiej wysłania certyfikatu w pakiecie nr 38.
- W pakiecie 38, gdzie router wysyła pakiet „Certificate Request”, sprawdź „Wyróżniające się nazwy” sekcji zawierającej szczegółowe informacje o certyfikacie klienta, jego łańcuchu oraz urzędy certyfikacji akceptowane przez router (serwer).
Aplikacja kliencka wysyła swój certyfikat w pakiecie nr 41. Sprawdź certyfikat Sprawdź sekcję w pakiecie nr 41 i określ certyfikat wysyłany przez aplikację kliencką.
- Sprawdź, czy podmiot, wydawca certyfikatu i jego łańcuch wysłane przez klienta aplikacja (pakiet 41) jest zgodna z akceptowanym certyfikatem i jego łańcuchem z routera (pakiet 38). Jeśli coś się nie zgadza, właśnie to jest przyczyną tego błędu. Dlatego router (Serwer) wysyła zaszyfrowany alert (pakiet nr 57), po którym następuje numer FIN, ACK (pakiet 58) do Aplikacja kliencka i w końcu połączenie zostaje zakończone.
- Niezgodność certyfikatu i jego łańcucha może być spowodowana przez scenariusze opisane w w następujących sekcjach.
Przyczyna: nieprawidłowy certyfikat wysłany przez klienta
Zwykle dzieje się tak, gdy podmiot/wystawca certyfikatu lub jego łańcucha wysłanego przez aplikacja kliencka nie pasuje do certyfikatu lub jego łańcucha zapisanego w magazynie zaufania routera (serwera).
Diagnostyka
Zaloguj się w interfejsie Edge i wyświetl konkretną konfigurację hosta wirtualnego (Administracja > Hosty wirtualne), do których jest wysyłane żądanie do interfejsu API lub użyj interfejsu Get virtual host API. Management API, aby uzyskać definicję konkretnego hosta wirtualnego.
Host wirtualny do dwukierunkowej komunikacji TLS wygląda zwykle tak:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>
- Określ odwołanie do magazynu zaufania używane na hoście wirtualnym.
W powyższym przykładzie nazwa referencyjna Truststore to myCompanyTruststoreRef.
- Określ magazyn zaufania wskazywany przez odwołanie do magazynu zaufania.
- W interfejsie Edge otwórz Administracja > Odniesienia do środowisk i wyszukaj nazwę referencyjną do magazynu zaufania.
Zanotuj nazwę w kolumnie Plik referencyjny dla konkretnej odwołania do Truststore. To będzie nazwa magazynu zaufania.
Zwróć uwagę, że w powyższym przykładzie myCompanyTruststoreRef zawiera wartość odniesienie do magazynu danych myCompanyTruststore. W związku z tym nazwa magazynu zaufania to myCompanyTruststore.
- Pobierz certyfikaty zapisane w Truststore (określone w poprzednim kroku) przy użyciu tych interfejsów API:
Wyświetlanie listy certyfikatów dla magazynu kluczy lub interfejsu Truststore API
Ten interfejs API zawiera listę wszystkich certyfikatów w określonym Truststore.
Uzyskiwanie szczegółów certyfikatu z magazynu kluczy lub interfejsu Truststore API
Ten interfejs API zwraca informacje o konkretnym certyfikacie w konkretnym Truststore.
- Sprawdź, czy wydawca i podmiot każdego certyfikatu i jego łańcucha są przechowywane w myCompanyTruststore jest zgodny z certyfikatem i jego łańcuchem jako widoczne w pakietach TCP/IP (patrz pakiet nr 38) powyżej. Jeśli występuje niezgodność, oznacza to, że certyfikaty przesłane do magazynu zaufania nie są wczytywane w routerze brzegowym. Przejdź do sekcji Przyczyna: certyfikaty klienta nie zostały wczytane w routerze brzegowym.
- Jeśli w kroku 5 nie znaleziono niezgodności, oznacza to, że aplikacja kliencka ją znalazła. nie wysyła odpowiedniego certyfikatu i jego łańcucha.
Rozdzielczość
Sprawdź, czy aplikacja kliencka wysyła do Edge odpowiedni certyfikat i jego łańcuch.
Przyczyna: brak głównego certyfikatu klienta w Truststore
Ten błąd jest zgłaszany, jeśli w magazynu zaufania routera Edge.
Diagnostyka
Zaloguj się w interfejsie Edge i wyświetl konkretną konfigurację hosta wirtualnego, dla której interfejs API (Administracja > Hosty wirtualne > virtual_host) lub skorzystaj z . Pobierz interfejs API hosta wirtualnego, aby uzyskać definicję konkretnego hosta wirtualnego.
Host wirtualny do dwukierunkowej komunikacji TLS wygląda zwykle tak:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>
- Określ odwołanie do magazynu zaufania używanego na hoście wirtualnym. W poprzednim przykładzie nazwa odniesienia do magazynu zaufania to myCompanyTruststoreRef.
- Określ rzeczywisty magazyn zaufania używany przez odwołanie do magazynu zaufania.
- W interfejsie Edge wybierz Admin > (Administrator >). Środowiska > Pliki referencyjne i wyszukiwanie dla nazwy referencyjnej magazynu zaufania.
Nazwa magazynu zaufania dla konkretnego odwołania do magazynu zaufania znajduje się w sekcji kolumnę Odwołanie.
Zwróć uwagę, że w tym przykładzie myCompanyTruststoreRef myCompanyTruststore w kolumnie Odwołanie. Dlatego magazyn zaufania nazywam się myCompanyTruststore.
- Pobierz certyfikaty zapisane w magazynie zaufania (określone w poprzednim kroku) za pomocą
tych interfejsów API:
- Wyświetl listę certyfikatów dla magazynu kluczy lub interfejsu API Truststore Ten interfejs API zawiera listę wszystkich w magazynie zaufania.
- Pobierz szczegóły certyfikatu z magazynu kluczy lub interfejsu Truststore API Ten interfejs API zwraca informacje o konkretny certyfikat w magazynie zaufania.
Sprawdź, czy certyfikat zawiera pełny łańcuch, w tym certyfikat główny wysyłane przez konkretnego klienta, tak jak w pakietach TCP/IP (zobacz ilustrację 4). Magazyn zaufania musi zawierać certyfikat główny, a także certyfikat lub liść klienta; certyfikatu pośredniego. Jeśli w magazynie zaufania brakuje prawidłowego certyfikatu głównego klienta, to właśnie on jest przyczyną błędu.
Jeśli jednak kompletny łańcuch certyfikatów klienta, w tym certyfikat główny, istnieje w magazynie zaufania, oznacza to, że certyfikaty przesłane do magazyn zaufania prawdopodobnie nie został wczytany w routerze brzegowym. W takim przypadku zapoznaj się z artykułem Przyczyna: certyfikaty klienta nie zostały załadowane do routera brzegowego.
Rozdzielczość
Sprawdź, czy jest dostępny właściwy certyfikat klienta, w tym certyfikat główny w magazynie zaufania routera Apigee Edge.
Przyczyna: certyfikaty klienta nie zostały załadowane w routerze brzegowym
- Jeśli korzystasz z Public Cloud, skontaktuj się z zespołem pomocy Apigee Edge.
- Jeśli jesteś użytkownikiem Private Cloud, na każdym routerze wykonaj te czynności:
- Sprawdź, czy plik
/opt/nginx/conf.d/OrgName_envName_vhostName-client.pem
istnieje dla konkretnego hosta wirtualnego. Jeśli plik nie istnieje, przejdź do Rozwiązanie poniżej. - Jeśli plik istnieje, użyj poniższego polecenia
openssl
, aby pobrać szczegóły certyfikaty dostępne w routerze Edge:openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
- Sprawdź wystawcę, podmiot i datę ważności certyfikatu. Jeśli któryś z tych elementów nie jest zgodny z żadnym z tych elementów z danymi zaobserwowanymi w Truststore w interfejsie Edge lub za pomocą interfejsów API do zarządzania. przyczyny błędu.
- Możliwe, że router nie załadował ponownie przesłanych certyfikatów.
- Sprawdź, czy plik
Rozdzielczość
Ponownie uruchom router, aby sprawdzić, czy najnowsze certyfikaty zostały załadowane, wykonując czynności opisane poniżej:
apigee-service edge-router restart
Ponownie uruchom interfejsy API i sprawdź wyniki. Jeśli problem będzie się powtarzał, otwórz Gromadzenie informacji diagnostycznych.
Zbieranie informacji diagnostycznych
Jeśli po wykonaniu powyższych czynności problem nie ustąpi, zbierz poniższe informacje diagnostyczne. Skontaktuj się z zespołem pomocy Apigee Edge i udostępnij mu zgromadzone informacje:
- Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa serwera proxy interfejsu API
- Nazwa hosta wirtualnego
- Nazwa aliasu hosta
- Wykonaj polecenie curl, aby odtworzyć błąd
- Pakiety TCP/IP przechwycone przez aplikację kliencką
- Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:
- Nazwa hosta wirtualnego i jej definicja za pomocą interfejsu Get virtual host API (Pobierz interfejs API hosta wirtualnego).
- Nazwa aliasu hosta
- Zaobserwowano pełny komunikat o błędzie
- Pakiety TCP/IP przechwycone przez aplikację kliencką lub router.
- Dane wyjściowe: Wyświetl listę certyfikatów z interfejsu API magazynu kluczy interfejsu API oraz szczegóły każdego certyfikatu uzyskanego za pomocą interfejsu Get cert details API.
- szczegółowe informacje o wypróbowanych sekcjach tego Poradnika oraz o innych statystykach, które pomóc nam w szybkim rozwiązaniu tego problemu.