Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Aplikacja kliencka otrzymuje odpowiedź HTTP 400 – Nieprawidłowe żądanie z komunikatem "The SSL certificate error" (Błąd certyfikatu SSL). Ten błąd jest zwykle wysyłany przez router Edge w konfiguracji TLS dwukierunkowego włączonej dla połączenia przychodzącego z Apigee Edge.
Komunikat o błędzie
Aplikacja kliencka otrzymuje ten kod odpowiedzi:
HTTP/1.1 400 Bad Request
Następnie wyświetla się ta 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 rozwiązywania problemów, których dotyczy |
| Certyfikat klienta wygasł | Certyfikat wysłany przez klienta wygasł. | Użytkownicy chmury prywatnej i publicznej Edge |
| Klient wysłał nieprawidłowy certyfikat | Ten błąd jest zgłaszany, jeśli certyfikat wysłany przez aplikację kliencką nie jest zgodny z certyfikatem przechowywanym w magazynie zaufanych certyfikatów routera Edge. | Użytkownicy chmury prywatnej i publicznej Edge |
| Brak głównego certyfikatu klienta w magazynie zaufanych certyfikatów | Ten błąd występuje, jeśli w magazynie zaufania routera Edge brakuje głównego certyfikatu podpisanego przez urząd certyfikacji klienta. | Użytkownicy chmury prywatnej i publicznej Edge |
| Certyfikaty klienta nie zostały wczytane do routera Edge | Ten błąd jest zgłaszany, jeśli certyfikaty klienta przesłane do magazynu zaufanych certyfikatów nie zostały wczytane do routera. | Użytkownicy chmury prywatnej Edge |
Przyczyna: certyfikat klienta wygasł
Ten problem zwykle występuje w przypadku TLS dwukierunkowego, gdy certyfikat wysłany przez klienta wygasł. W przypadku TLS dwukierunkowego klient i serwer wymieniają się certyfikatami publicznymi, aby przeprowadzić uzgadnianie. Klient weryfikuje certyfikat serwera a serwer weryfikuje certyfikat klienta.
W Edge TLS dwukierunkowy jest implementowany na hoście wirtualnym, gdzie certyfikat serwera jest dodawany do magazynu kluczy, a certyfikat klienta jest dodawany do magazynów zaufania.
Jeśli podczas uzgadniania TLS okaże się, że certyfikat klienta wygasł, serwer wyśle odpowiedź 400 – Nieprawidłowe żądanie z komunikatem "The SSL certificate error".
Diagnostyka
Zaloguj się w interfejsie Edge i wyświetl konfigurację konkretnego hosta wirtualnego (Administracja > Hosty wirtualne), dla którego wysyłane jest żądanie do interfejsu API, lub użyj interfejsu API zarządzania Get virtual host API , aby uzyskać definicję konkretnego hosta wirtualnego.
Host wirtualny do komunikacji TLS dwukierunkowej zwykle wygląda 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 odniesienie do magazynu zaufanych certyfikatów używane w hoście wirtualnym. W powyższym przykładzie, nazwa odniesienia do magazynu zaufanych certyfikatów to myTruststoreRef.
- Określ magazyn zaufanych certyfikatów, na który wskazuje odniesienie do magazynu zaufanych certyfikatów.
- W interfejsie Edge otwórz Administracja > Środowiska > Odniesienia i wyszukaj nazwę odniesienia do magazynu zaufania.
Zanotuj nazwę w kolumnie Odniesienie dla konkretnego odniesienia do magazynu zaufania. Będzie to nazwa magazynu zaufania.
Rysunek 1. W powyższym przykładzie widać, że myTruststoreRef odwołuje się do myTruststore. Dlatego nazwa magazynu zaufania to myTruststore.
- W interfejsie Edge otwórz Administracja > Środowiska > Magazyny kluczy protokołu TLS i poszukaj magazynu zaufanych certyfikatów znalezionego w kroku 3.
Wybierz certyfikat w konkretnym magazynie zaufania (określonym w kroku 3 powyżej), jak pokazano poniżej:
Rysunek 2. Certyfikat z aliasem
client-cert-markww powyższym przykładzie pokazuje, że wygasł.- Sprawdź, czy certyfikat wygasł w przypadku aliasu certyfikatu w magazynie zaufanych certyfikatów.
- Jeśli certyfikat nie wygasł, przejdź do typowe czynności diagnostyczne w przypadku innych przyczyn.
Rozdzielczość
Uzyskaj nowy certyfikat i prześlij go:
- Utwórz nowy magazyn zaufania, np. myNewTruststore.
- Prześlij nowy certyfikat do nowo utworzonego magazynu zaufania.
Zmień odniesienie do magazynu zaufanych certyfikatów używane w konkretnym hoście wirtualnym, aby wskazywało na nowy magazyn zaufanych certyfikatów, wykonując czynności opisane w sekcji Zmienianie odniesienia.
W opisanym powyżej przykładzie odniesienie myTruststoreRef powinno wskazywać na myNewTruststore.
Typowe czynności diagnostyczne w przypadku innych przyczyn
- Aby zbadać ten problem, musisz przechwycić pakiety TCP/IP za pomocą narzędzia
tcpdump.
- Jeśli jesteś użytkownikiem chmury prywatnej, możesz przechwytywać pakiety TCP/IP w aplikacji klienckiej lub routerze.
- Jeśli jesteś użytkownikiem chmury publicznej, przechwytuj pakiety TCP/IP w aplikacji klienckiej.
Gdy zdecydujesz, gdzie chcesz przechwytywać pakiety TCP/IP, użyj tego tcpdump polecenia, aby je przechwycić:
tcpdump -i any -s 0 host <IP address> -w <File name>
Uwaga: jeśli przechwytujesz pakiety TCP/IP w routerze, użyj publicznego adresu IP aplikacji klienckiej w poleceniu
tcpdump.Jeśli przechwytujesz pakiety TCP/IP w aplikacji klienckiej, użyj publicznego adresu IP nazwy hosta używanej w hoście wirtualnym w poleceniu
tcpdump.Więcej informacji o tym narzędziu i innych wariantach tego polecenia znajdziesz w dokumentacji tcpdump.
- Przeanalizuj pakiety TCP/IP zebrane za pomocą narzędzia Wireshark lub podobnego narzędzia, które znasz.
Oto analiza przykładowych danych pakietów TCP/IP za pomocą narzędzia Wireshark:
- Pakiet nr 30 w tcpdump (obraz poniżej) pokazuje, że aplikacja kliencka (źródło) wysłała „Client Hello” do routera (miejsce docelowe).
- Pakiet nr 34 pokazuje, że router potwierdza wiadomość Client Hello z aplikacji klienckiej.
- Router wysyła "Server Hello" w pakiecie nr 35, a następnie wysyła swój certyfikat i także prosi aplikację kliencką o wysłanie swojego certyfikatu w pakiecie nr 38.
- W pakiecie nr 38, w którym router wysyła „Certificate Request” pakiet, sprawdź sekcję „Distinguished Names”, która zawiera szczegóły dotyczące certyfikatu klienta, jego łańcucha i urzędów certyfikacji akceptowanych przez router (serwer).
Aplikacja kliencka wysyła swój certyfikat w pakiecie nr 41. Sprawdź sekcję Certificate Verify w pakiecie nr 41 i określ certyfikat wysłany przez aplikację kliencką.
Rysunek 4. - Sprawdź, czy podmiot i wystawca certyfikatu oraz jego łańcucha wysłanego przez aplikację kliencką (pakiet nr 41) są zgodne z akceptowanym certyfikatem i jego łańcuchem z routera (pakiet nr 38). Jeśli występuje niezgodność, jest to przyczyna tego błędu. Dlatego router (serwer) wysyła zaszyfrowany alert (pakiet nr 57), a następnie FIN, ACK (pakiet nr 58) do aplikacji klienckiej i ostatecznie połączenie zostaje zakończone.
- Niezgodność certyfikatu i jego łańcucha może być spowodowana scenariuszami opisanymi w kolejnych sekcjach.
Przyczyna: klient wysłał nieprawidłowy certyfikat
Zwykle dzieje się tak, jeśli podmiot lub wystawca certyfikatu lub jego łańcucha wysłanego przez aplikację kliencką nie jest zgodny z certyfikatem lub jego łańcuchem przechowywanym w magazynie zaufanych certyfikatów routera (serwera).
Diagnostyka
Zaloguj się w interfejsie Edge i wyświetl konfigurację konkretnego hosta wirtualnego (Administracja > Hosty wirtualne), dla którego wysyłane jest żądanie do interfejsu API, lub użyj interfejsu API zarządzania Get virtual host API , aby uzyskać definicję konkretnego hosta wirtualnego.
Host wirtualny do komunikacji TLS dwukierunkowej zwykle wygląda 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 odniesienie do magazynu zaufanych certyfikatów używane w hoście wirtualnym.
W powyższym przykładzie nazwa odniesienia do magazynu zaufanych certyfikatów to myCompanyTruststoreRef.
- Określ magazyn zaufanych certyfikatów, na który wskazuje odniesienie do magazynu zaufanych certyfikatów.
- W interfejsie Edge otwórz Administracja > Środowiska > Odniesienia i wyszukaj nazwę odniesienia do magazynu zaufanych certyfikatów.
Zanotuj nazwę w kolumnie Odniesienie dla konkretnego odniesienia do magazynu zaufania. Będzie to nazwa magazynu zaufania.
Rysunek 5. W powyższym przykładzie widać, że myCompanyTruststoreRef odwołuje się do myCompanyTruststore. Dlatego nazwa magazynu zaufania to myCompanyTruststore.
- Pobierz certyfikaty przechowywane w magazynie zaufanych certyfikatów (określonym w poprzednim kroku) za pomocą tych interfejsów API:
List certificates for a keystore or truststore API.
Ten interfejs API wyświetla listę wszystkich certyfikatów w konkretnym magazynie zaufanych certyfikatów.
Get cert details from a keystore or truststore API.
Ten interfejs API zwraca informacje o konkretnym certyfikacie w konkretnym magazynie zaufania.
- Sprawdź, czy wystawca i podmiot każdego certyfikatu oraz jego łańcucha przechowywanego w myCompanyTruststore są zgodne z certyfikatem i jego łańcuchem widocznym 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 do routera Edge. Przejdź do sekcji Przyczyna: certyfikaty klienta nie zostały wczytane do routera Edge.
- Jeśli w kroku 5 nie znaleziono niezgodności, oznacza to, że aplikacja kliencka nie wysłała prawidłowego certyfikatu i jego łańcucha.
Rozdzielczość
Upewnij się, że aplikacja kliencka wysyła do Edge prawidłowy certyfikat i jego łańcuch.
Przyczyna: w magazynie zaufanych certyfikatów brakuje głównego certyfikatu klienta
Ten błąd występuje, jeśli w magazynie zaufania routera Edge brakuje głównego certyfikatu podpisanego przez urząd certyfikacji klienta.
Diagnostyka
Zaloguj się w interfejsie Edge i wyświetl konfigurację konkretnego hosta wirtualnego, dla którego wysyłane jest żądanie interfejsu API (Administracja > Hosty wirtualne > virtual_host), lub użyj interfejsu API Get virtual host, aby uzyskać definicję konkretnego hosta wirtualnego.
Host wirtualny do komunikacji TLS dwukierunkowej zwykle wygląda 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 odniesienie do magazynu zaufanych certyfikatów używane w hoście wirtualnym. W poprzednim przykładzie, nazwa odniesienia do magazynu zaufania to myCompanyTruststoreRef.
- Określ rzeczywisty magazyn zaufanych certyfikatów używany przez odniesienie do magazynu zaufanych certyfikatów.
- W interfejsie Edge otwórz Administracja > Środowiska > Odniesienia i wyszukaj nazwę odniesienia do magazynu zaufanych certyfikatów.
Nazwa magazynu zaufanych certyfikatów dla konkretnego odniesienia do magazynu zaufanych certyfikatów znajduje się w kolumnie Odniesienie.
Rysunek 6. W tym przykładzie widać, że myCompanyTruststoreRef ma myCompanyTruststore w kolumnie Odniesienie. Dlatego nazwa magazynu zaufanych certyfikatów to myCompanyTruststore.
- Pobierz certyfikaty przechowywane w magazynie zaufanych certyfikatów (określonym w poprzednim kroku) za pomocą tych interfejsów API:
- List certificates for a keystore or truststore API. Ten interfejs API wyświetla listę wszystkich certyfikatów w magazynie zaufanych certyfikatów.
- Get cert details from a keystore or truststore API. Ten interfejs API zwraca informacje o konkretnym certyfikacie w magazynie zaufania.
Sprawdź, czy certyfikat zawiera pełny łańcuch, w tym główny certyfikat wysłany przez konkretnego klienta, jak widać w pakietach TCP/IP (patrz Rysunek 4). Magazyn zaufania musi zawierać główny certyfikat oraz certyfikat liścia klienta lub certyfikat liścia i certyfikat pośredni. Jeśli w magazynie zaufanych certyfikatów brakuje prawidłowego certyfikatu głównego klienta, jest to przyczyna błędu.
Jeśli jednak w magazynie zaufanych certyfikatów znajduje się pełny łańcuch certyfikatów klienta, w tym certyfikat główny, oznacza to, że certyfikaty przesłane do magazynu zaufanych certyfikatów prawdopodobnie nie zostały wczytane do routera Edge. W takim przypadku przeczytaj sekcję Przyczyna: certyfikaty klienta nie zostały wczytane do routera Edge.
Rozdzielczość
Upewnij się, że w magazynie zaufanych certyfikatów routera Apigee Edge znajduje się prawidłowy certyfikat klienta, w tym certyfikat główny.
Przyczyna: certyfikaty klienta nie zostały wczytane do routera Edge
- Jeśli jesteś użytkownikiem chmury publicznej, skontaktuj się z zespołem pomocy Apigee Edge.
- Jeśli jesteś użytkownikiem chmury prywatnej, wykonaj te instrukcje na każdym routerze:
- Sprawdź, czy dla konkretnego hosta wirtualnego istnieje plik
/opt/nginx/conf.d/OrgName_envName_vhostName-client.pem. Jeśli plik nie istnieje, przejdź do sekcji Rozwiązanie poniżej. - Jeśli plik istnieje, użyj tego polecenia
openssl, aby uzyskać szczegóły certyfikatów dostępnych w routerze Edge:openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
- Sprawdź wystawcę, podmiot i datę ważności certyfikatu. Jeśli którykolwiek z tych elementów nie jest zgodny z tym, co zaobserwowano w magazynie zaufanych certyfikatów w interfejsie Edge lub za pomocą interfejsów API zarządzania, jest to przyczyna błędu.
- Możliwe, że router nie przeładował przesłanych certyfikatów.
- Sprawdź, czy dla konkretnego hosta wirtualnego istnieje plik
Rozdzielczość
Uruchom ponownie router, aby mieć pewność, że najnowsze certyfikaty zostały wczytane, wykonując ten krok:
apigee-service edge-router restart
Ponownie uruchom interfejsy API i sprawdź wyniki. Jeśli problem nadal występuje, przejdź do sekcji Zbieranie informacji diagnostycznych.
Zbieranie informacji diagnostycznych
Jeśli problem nadal występuje po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne. Skontaktuj się z zespołem pomocy Apigee Edge i udostępnij mu zebrane informacje:
- Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
- Nazwa organizacji
- Nazwa środowiska
- Nazwa proxy interfejsu API
- Nazwa hosta wirtualnego
- Nazwa aliasu hosta
- Pełne polecenie curl do odtworzenia błędu
- Pakiety TCP/IP przechwycone w aplikacji klienckiej
- Jeśli jesteś użytkownikiem chmury prywatnej, podaj te informacje:
- Nazwa hosta wirtualnego i jego definicja za pomocą interfejsu API Get virtual host
- Nazwa aliasu hosta
- Pełny komunikat o błędzie
- Pakiety TCP/IP przechwycone w aplikacji klienckiej lub routerze.
- Dane wyjściowe interfejsu API List the certificates from the keystore API oraz szczegóły każdego certyfikatu uzyskane za pomocą interfejsu API Get cert details API.
- Szczegóły dotyczące sekcji tego przewodnika, które zostały przez Ciebie wypróbowane, oraz wszelkie inne informacje, które pomogą nam przyspieszyć rozwiązanie tego problemu.