Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
Błąd uzgadniania połączenia TLS/SSL występuje, gdy klient i serwer nie mogą nawiązać komunikacji z użyciem protokołu TLS/SSL. Gdy ten błąd wystąpi w Apigee Edge, aplikacja kliencka otrzyma stan HTTP 503 z komunikatem Service Niedostępne (Usługa niedostępna). Ten błąd występuje po każdym wywołaniu interfejsu API, w którym wystąpił błąd uzgadniania połączenia TLS/SSL.
Komunikaty o błędach
HTTP/1.1 503 Service Unavailable
Ten komunikat o błędzie możesz też zobaczyć w przypadku wystąpienia błędu uzgadniania połączenia TLS/SSL:
Received fatal alert: handshake_failure
Możliwe przyczyny
TLS (Transport Layer Security, którego poprzednikiem jest SSL) to standardowa technologia zabezpieczeń do ustanowienia zaszyfrowanego połączenia między serwerem WWW a klientem internetowym, takim jak przeglądarka lub aplikacja. Uzgadnianie połączenia to proces, który umożliwia klientowi i serwerowi TLS/SSL ustanowienie zestawu tajnych kluczy, z którymi mogą się komunikować. Podczas tego procesu klient i serwer:
- Uzgodnij wersję protokołu, której chcesz używać.
- Wybierz algorytm kryptograficzny, którego chcesz używać.
- Uwierzytelniaj się, wymieniając i weryfikując certyfikaty cyfrowe.
Jeśli uzgadnianie połączenia TLS/SSL zakończy się powodzeniem, klient TLS/SSL i serwer będą bezpiecznie przesyłać dane między sobą. W przeciwnym razie, jeśli wystąpi błąd uzgadniania połączenia TLS/SSL, połączenie zostanie zakończone, a klient otrzyma błąd 503 Service Unavailable
.
Możliwe przyczyny niepowodzeń uzgadniania połączenia TLS/SSL:
Przyczyna | Opis | Kto może rozwiązywać problemy |
---|---|---|
Niezgodność protokołu | Protokół używany przez klienta nie jest obsługiwany przez serwer. | Użytkownicy chmury prywatnej i publicznej |
Niezgodność pakietu Cipher Suite | Zestaw mechanizmów szyfrowania używany przez klienta nie jest obsługiwany przez serwer. | Użytkownicy chmury prywatnej i publicznej |
Nieprawidłowy certyfikat | Nazwa hosta w adresie URL używanym przez klienta nie jest zgodna z nazwą hosta w certyfikacie zapisanym po stronie serwera. | Użytkownicy chmury prywatnej i publicznej |
Po stronie klienta lub serwera przechowywany jest niepełny lub nieprawidłowy łańcuch certyfikatów. | Użytkownicy chmury prywatnej i publicznej | |
Klient wysyła nieprawidłowy lub nieważny certyfikat na serwer lub z serwera do klienta. | Użytkownicy chmury prywatnej i publicznej | |
Serwer z włączoną usługą SNI | Serwer backendu ma włączoną opcję SNI, ale klient nie może komunikować się z serwerami SNI. | Tylko użytkownicy Private Cloud |
Niezgodność protokołu
Niepowodzenie uzgadniania połączenia TLS/SSL występuje, jeśli protokół używany przez klienta nie jest obsługiwany przez serwer na połączeniu przychodzącym (granicznym północnym) lub wychodzącym (południowym). Zapoznaj się też z informacjami o połączeniach w kierunku północnym i południowym.
Diagnostyka
- Sprawdź, czy błąd wystąpił w połączeniu północnym czy southbound. Więcej wskazówek, które pomogą Ci w określeniu tego problemu, znajdziesz w artykule Ustalanie źródła problemu.
- Uruchom narzędzie
tcpdump, aby zebrać więcej informacji:
- Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
tcpdump
u odpowiedniego klienta lub serwera. Klientem może być aplikacja klienta (w przypadku połączeń przychodzących lub kierowanych na północ) albo procesor wiadomości (w przypadku połączeń wychodzących lub południowych). Serwerem może być router brzegowy (dla połączeń przychodzących lub kierowanych na północ) lub serwer backendu (dla połączeń wychodzących lub południowych) w zależności od tego, jak określono w kroku 1. - Jeśli jesteś użytkownikiem chmury publicznej, możesz zbierać dane
tcpdump
tylko w aplikacji klienckiej (w przypadku połączeń przychodzących lub kierowanych na północ) albo na serwerze backendu (na potrzeby połączeń wychodzących lub południowych), ponieważ nie masz dostępu do routera brzegowego ani procesora wiadomości.
tcpdump -i any -s 0 host IP address -w File name
Aby dowiedzieć się więcej o korzystaniu z poleceniatcpdump
, zapoznaj się z danymi tcpdump. - Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
- Przeanalizuj dane
tcpdump
za pomocą narzędzia Wireshark lub podobnego. - Oto przykładowa analiza narzędzia
tcpdump z użyciem Wiresharka:
- W tym przykładzie wystąpił błąd uzgadniania połączenia TLS/SSL między procesorem wiadomości a serwerem backendu (połączeniem wychodzącym lub południowym).
- Komunikat 4 w danych wyjściowych
tcpdump
poniżej oznacza, że podmiot przetwarzający wiadomości (źródło) wysłał komunikat „Client Hello” do serwera backendu (miejsce docelowe).
Jeśli wybierzesz komunikat
Client Hello
, będzie on oznaczał, że procesor wiadomości używa protokołu TLSv1.2, jak pokazano poniżej:- Komunikat 5 pokazuje, że serwer backendu przyjmuje wiadomość „Cześć klienta” od procesora wiadomości.
- Serwer backendu natychmiast wysyła alert krytyczny : Zamknij powiadomienie do podmiotu przetwarzającego wiadomości (komunikat nr 6). Oznacza to, że uzgadnianie połączenia TLS/SSL nie powiodło się i połączenie zostanie zamknięte.
Zgłębienie wiadomości nr 6 wskazuje, że przyczyną błędu uzgadniania połączenia TLS/SSL jest to, że serwer backendu obsługuje tylko protokół TLSv1.0, jak pokazano poniżej:
- Ponieważ występuje niezgodność między protokołem używanym przez procesor wiadomości a serwerem backendu, serwer backendu wysłał komunikat Komunikat alertu o błędzie: Zamknij powiadomienie.
Rozdzielczość
Procesor wiadomości działa w Javie 8 i domyślnie używa protokołu TLSv1.2. Jeśli serwer backendu nie obsługuje protokołu TLSv1.2, możesz rozwiązać ten problem, wykonując jedną z tych czynności:
- Uaktualnij serwer backendu, aby obsługiwał protokół TLSv1.2. Jest to zalecane rozwiązanie, ponieważ protokół TLSv1.2 jest bezpieczniejszy.
- Jeśli z jakiegoś powodu nie możesz od razu uaktualnić serwera backendu, możesz wymusić na procesorze wiadomości użycie protokołu TLSv1.0 do komunikacji z serwerem backendu, wykonując te czynności:
- Jeśli nie określisz serwera docelowego w definicji elementu TargetEndpoint na serwerze proxy, ustaw element
Protocol
naTLSv1.0
, jak pokazano poniżej:<TargetEndpoint name="default"> … <HTTPTargetConnection> <SSLInfo> <Enabled>true</Enabled> <Protocols> <Protocol>TLSv1.0</Protocol> </Protocols> </SSLInfo> <URL>https://myservice.com</URL> </HTTPTargetConnection> … </TargetEndpoint>
- Jeśli dla serwera proxy skonfigurowano serwer docelowy, użyj tego interfejsu API do zarządzania, aby ustawić protokół TLSv1.0 w konkretnej konfiguracji serwera docelowego.
- Jeśli nie określisz serwera docelowego w definicji elementu TargetEndpoint na serwerze proxy, ustaw element
Niezgodność cyfr
Jeśli algorytm zestawu szyfrów używany przez klienta nie jest obsługiwany przez serwer na połączeniu przychodzącym (granicznym północnym) lub wychodzącym (południowym) w Apigee Edge, może wystąpić błąd uzgadniania połączenia TLS/SSL. Zapoznaj się też z informacjami o połączeniach na północ i południe.
Diagnostyka
- Sprawdź, czy błąd wystąpił na połączeniu północnym czy południowym. Więcej wskazówek, które pomogą Ci w określeniu tego problemu, znajdziesz w artykule Określanie źródła problemu.
- Uruchom narzędzie
tcpdump, aby zebrać więcej informacji:
- Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
tcpdump
u odpowiedniego klienta lub serwera. Klientem może być aplikacja klienta (w przypadku połączeń przychodzących lub kierowanych na północ) albo procesor wiadomości (w przypadku połączeń wychodzących lub południowych). Serwerem może być router brzegowy (dla połączeń przychodzących lub kierowanych na północ) lub serwer backendu (dla połączeń wychodzących lub południowych) w zależności od tego, jak określono w kroku 1. - Jeśli jesteś użytkownikiem chmury publicznej, możesz zbierać dane
tcpdump
tylko w aplikacji klienckiej (w przypadku połączeń przychodzących lub kierowanych na północ) albo na serwerze backendu (na potrzeby połączeń wychodzących lub południowych), ponieważ nie masz dostępu do routera brzegowego ani procesora wiadomości.
tcpdump -i any -s 0 host IP address -w File name
Aby dowiedzieć się więcej o korzystaniu z poleceniatcpdump
, zapoznaj się z danymi tcpdump. - Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
- Przeanalizuj dane
tcpdump
za pomocą narzędzia Wireshark lub innego, które znasz. - Oto przykładowa analiza danych wyjściowych
tcpdump
przy użyciu programu Wireshark:- W tym przykładzie między aplikacją klienta a routerem brzegowym (połączenie północne) wystąpił błąd uzgadniania połączenia TLS/SSL. Dane wyjściowe
tcpdump
zostały zebrane na routerze brzegowym. Komunikat nr 4 w danych wyjściowych
tcpdump
poniżej oznacza, że aplikacja kliencka (źródło) wysłała komunikat „Client Hello” do routera brzegowego (docelowego).Wybranie komunikatu Client Hello oznacza, że aplikacja kliencka używa protokołu TLSv1.2.
- Komunikat nr 5 oznacza, że router brzegowy przyjmuje komunikat „Client Hello” (Witaj klienta) od aplikacji klienckiej.
- Router brzegowy natychmiast wysyła do aplikacji klienckiej alert krytyczny : błąd uzgadniania połączenia (komunikat nr 6). Oznacza to, że uzgadnianie połączenia TLS/SSL nie powiodło się i połączenie zostanie zamknięte.
- Przejście do wiadomości nr 6 zawiera te informacje:
- Router brzegowy obsługuje protokół TLSv1.2. Oznacza to, że protokół jest zgodny między aplikacją kliencką a routerem brzegowym.
Jednak router brzegowy nadal wysyła do aplikacji klienckiej komunikat Fatal Alert: Handshakeure (Błąd krytyczny: błąd uzgadniania połączenia) do aplikacji klienckiej, jak pokazano na zrzucie ekranu poniżej:
- Możliwe przyczyny błędu:
- Aplikacja kliencka nie używa algorytmów zestawu szyfrów obsługiwanych przez router brzegowy.
- Router brzegowy ma włączoną obsługę SNI, ale aplikacja kliencka nie wysyła nazwy serwera.
- Komunikat nr 4 w danych wyjściowych
tcpdump
zawiera listę algorytmów pakietu szyfrów obsługiwanych przez aplikację kliencką, jak pokazano poniżej: - Lista algorytmów pakietu szyfrów obsługiwanych przez router brzegowy znajduje się w pliku
/opt/nginx/conf.d/0-default.conf
. W tym przykładzie router brzegowy obsługuje tylko algorytmy zestawu szyfrów High Encryption. - Aplikacja kliencka nie używa żadnych algorytmów pakietu szyfrów High Encryption. Ta niezgodność jest przyczyną błędu uzgadniania połączenia TLS/SSL.
- Ponieważ router brzegowy obsługuje SNI, przewiń stronę w dół do komunikatu nr 4 w danych wyjściowych
tcpdump
i sprawdź, czy aplikacja kliencka wysyła nazwę serwera prawidłowo, jak pokazano na ilustracji poniżej:
- Jeśli ta nazwa jest prawidłowa, możesz wywnioskować, że wystąpił błąd uzgadniania połączenia TLS/SSL, ponieważ algorytmy zestawu szyfrów używane przez aplikację kliencką nie są obsługiwane przez router brzegowy.
- W tym przykładzie między aplikacją klienta a routerem brzegowym (połączenie północne) wystąpił błąd uzgadniania połączenia TLS/SSL. Dane wyjściowe
Rozdzielczość
Musisz się upewnić, że klient używa algorytmów zestawu szyfrów obsługiwanych przez serwer. Aby rozwiązać problem opisany w poprzedniej sekcji Diagnostyka, pobierz i zainstaluj pakiet Java Cryptography Extension (JCE) i umieść go w instalacji w języku Java, aby zapewnić obsługę algorytmów pakietu szyfrów High Encryption.
Nieprawidłowy certyfikat
Nieudana próba uzgadniania połączenia TLS/SSL występuje, jeśli w magazynie kluczy/magazynie zaufania masz nieprawidłowe certyfikaty w przypadku połączenia przychodzącego (na północ) lub wychodzącego (południowego) w Apigee Edge. Zapoznaj się też z informacjami o połączeniach w kierunku północnym i południowym.
Jeśli problem jest związany z problemem północnym, w zależności od jego przyczyny możesz zobaczyć różne komunikaty o błędach.
Poniżej znajdziesz przykładowe komunikaty o błędach oraz sposoby diagnozowania i rozwiązywania tego problemu.
Komunikaty o błędach
W zależności od przyczyny niepowodzenia uzgadniania połączenia TLS/SSL mogą wyświetlić się różne komunikaty o błędach. Oto przykładowy komunikat o błędzie, który może się pojawić po wywołaniu serwera proxy interfejsu API:
* SSL certificate problem: Invalid certificate chain * Closing connection 0 curl: (60) SSL certificate problem: Invalid certificate chain More details here: http://curl.haxx.se/docs/sslcerts.html
Możliwe przyczyny
Oto typowe przyczyny:
Przyczyna | Opis | Kto może rozwiązywać problemy |
Niezgodna nazwa hosta |
Nazwa hosta w adresie URL różni się od nazwy certyfikatu w magazynie kluczy routera. Na przykład niezgodność występuje, jeśli nazwa hosta używana w adresie URL to myorg.domain.com , a nazwa hosta w certyfikacie to CN=something.domain.com. .
|
Użytkownicy chmury prywatnej i publicznej Cloud |
Niekompletny lub nieprawidłowy łańcuch certyfikatów | Łańcuch certyfikatów nie jest kompletny lub nieprawidłowy. | Tylko użytkownicy prywatnych i publicznych chmury Edge |
Wygasły lub nieznany certyfikat wysłany przez serwer lub klienta | Wygasły lub nieznany certyfikat jest wysyłany przez serwer lub klienta w kierunku północnym lub południowym. | Użytkownicy chmury Private Cloud i użytkownicy chmury publicznej Edge |
Niezgodna nazwa hosta
Diagnostyka
- Zwróć uwagę na nazwę hosta używaną w adresie URL zwracanym przez to wywołanie interfejsu Edge Management API:
curl -v https://myorg.domain.com/v1/getinfo
Na przykład:curl -v https://api.enterprise.apigee.com/v1/getinfo
- Pobierz numer CN użyty w certyfikacie zapisanym w określonym magazynie kluczy. Aby uzyskać szczegóły certyfikatu, możesz użyć tych interfejsów API do zarządzania urządzeniami brzegowymi:
-
Uzyskaj nazwę certyfikatu z magazynu kluczy:
Jeśli jesteś użytkownikiem Private Cloud, użyj interfejsu API zarządzania w następujący sposób:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
Jeśli jesteś użytkownikiem chmury publicznej, użyj interfejsu Management API w następujący sposób:
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
Uzyskaj szczegółowe informacje o certyfikacie w magazynie kluczy za pomocą interfejsu Edge Management API.
Jeśli jesteś użytkownikiem Private Cloud:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
Jeśli jesteś użytkownikiem chmury publicznej:
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
Przykładowy certyfikat:
"certInfo": [ { "basicConstraints": "CA:FALSE", "expiryDate": 1456258950000, "isValid": "No", "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US", "publicKey": "RSA Public Key, 2048 bits", "serialNumber": "07:bc:a7:39:03:f1:56", "sigAlgName": "SHA1withRSA", "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com", "validFrom": 1358287055000, "version": 3 },
Nazwa podmiotu w certyfikacie głównym ma numer CN wynoszący
something.domain.com.
Ponieważ nazwa hosta w adresie URL żądania do interfejsu API (patrz krok 1 powyżej) i nazwa podmiotu w certyfikacie nie są zgodne, występuje błąd uzgadniania połączenia TLS/SSL.
-
Uzyskaj nazwę certyfikatu z magazynu kluczy:
Rozdzielczość
Ten problem można rozwiązać na 2 sposoby:
- Uzyskaj certyfikat (jeśli jeszcze go nie masz), z którym dana sieć komputerowa ma certyfikat z symbolem wieloznacznym, a następnie prześlij do magazynu kluczy nowy pełny łańcuch certyfikatów. Przykład:
"subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
- Uzyskaj certyfikat (jeśli jeszcze go nie masz) dla istniejącej nazwy CN, ale użyj atrybutu your-org.your-domain jako alternatywną nazwę podmiotu, a następnie prześlij do magazynu kluczy pełny łańcuch certyfikatów.
Odniesienia
Niekompletny lub nieprawidłowy łańcuch certyfikatów
Diagnostyka
- Pobierz numer CN użyty w certyfikacie zapisanym w określonym magazynie kluczy. Aby uzyskać szczegóły certyfikatu, możesz użyć tych interfejsów API do zarządzania urządzeniami brzegowymi:
-
Uzyskaj nazwę certyfikatu w magazynie kluczy:
Jeśli jesteś użytkownikiem Private Cloud:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
Jeśli jesteś użytkownikiem chmury publicznej:
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
Sprawdź szczegóły certyfikatu w magazynie kluczy:
Jeśli jesteś użytkownikiem Private Cloud:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
Jeśli jesteś użytkownikiem chmury publicznej:
curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
- Sprawdź certyfikat i jego łańcuch oraz upewnij się, że jest on zgodny ze wskazówkami zawartymi w artykule Jak działają łańcuchy certyfikatów, aby upewnić się, że jest to prawidłowy i kompletny łańcuch certyfikatów. Jeśli łańcuch certyfikatów przechowywany w magazynie kluczy jest niekompletny lub nieprawidłowy, pojawia się błąd uzgadniania połączenia TLS/SSL.
- Poniższy wykres przedstawia przykładowy certyfikat z nieprawidłowym łańcuchem certyfikatów, w którym certyfikaty pośrednie i główne nie są zgodne:
Przykładowy certyfikat pośredni i główny, w przypadku którego wystawca nie jest zgodny z podmiotem
-
Uzyskaj nazwę certyfikatu w magazynie kluczy:
Rozdzielczość
- Uzyskaj certyfikat (jeśli jeszcze go nie masz) zawierający kompletny i prawidłowy łańcuch certyfikatów.
- Uruchom to polecenie opensl, aby sprawdzić, czy łańcuch certyfikatów jest prawidłowy i kompletny:
openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
- Prześlij zweryfikowany łańcuch certyfikatów do magazynu kluczy.
Wygasły lub nieznany certyfikat wysłany przez serwer lub klienta
Jeśli serwer lub klient wyśle nieprawidłowy lub wygasły certyfikat na stronie północnej albo na połączeniu południowym, jego drugi koniec (serwer/klient) odrzuci certyfikat, co spowoduje błąd uzgadniania połączenia TLS/SSL.
Diagnostyka
- Sprawdź, czy błąd wystąpił w połączeniu północnym czy southbound. Więcej wskazówek, które pomogą Ci w określeniu tego problemu, znajdziesz w artykule Ustalanie źródła problemu.
- Uruchom narzędzie
tcpdump, aby zebrać więcej informacji:
- Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
tcpdump
u odpowiedniego klienta lub serwera. Klientem może być aplikacja klienta (w przypadku połączeń przychodzących lub kierowanych na północ) albo procesor wiadomości (w przypadku połączeń wychodzących lub południowych). Serwerem może być router brzegowy (dla połączeń przychodzących lub kierowanych na północ) lub serwer backendu (dla połączeń wychodzących lub południowych) w zależności od tego, jak określono w kroku 1. - Jeśli jesteś użytkownikiem chmury publicznej, możesz zbierać dane
tcpdump
tylko w aplikacji klienckiej (w przypadku połączeń przychodzących lub kierowanych na północ) albo na serwerze backendu (na potrzeby połączeń wychodzących lub południowych), ponieważ nie masz dostępu do routera brzegowego ani procesora wiadomości.
tcpdump -i any -s 0 host IP address -w File name
Aby dowiedzieć się więcej o korzystaniu z poleceniatcpdump
, zapoznaj się z danymi tcpdump. - Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
- Przeanalizuj dane
tcpdump
za pomocą Wireshark lub podobnego narzędzia. - Na podstawie danych wyjściowych
tcpdump
określ hosta (klienta lub serwer), który odrzuca certyfikat na etapie weryfikacji. - Certyfikat wysłany z drugiego końca możesz pobrać z danych wyjściowych
tcpdump
, o ile dane nie są zaszyfrowane. Będzie to przydatne do porównania, czy ten certyfikat pasuje do certyfikatu dostępnego w magazynie zaufania. - Sprawdź przykład
tcpdump
pod kątem komunikacji SSL między procesorem wiadomości a serwerem backendu.Przykładowy element
tcpdump
z wyświetlonym błędem „Nieznany certyfikat”
- Procesor wiadomości (klient) wysyła komunikat „Cześć klienta” do serwera backendu (serwera) w komunikacie nr 59.
- Serwer backendu wysyła do podmiotu przetwarzającego wiadomości wiadomość „Server Hello” w wiadomości #61.
- Wzajemnie weryfikują one protokół i algorytmy zestawu szyfrów.
- Serwer backendu wysyła certyfikat i komunikat Hello Done do serwera wiadomości do podmiotu przetwarzającego wiadomości w komunikacie nr 68.
- Procesor wiadomości wysyła alert krytyczny „Description: Certificate Unknown” (Opis: certyfikat nieznany) w komunikacie nr 70.
- W wiadomości #70 nie ma żadnych dodatkowych informacji poza komunikatem o alercie, jak pokazano poniżej:
- Zapoznaj się z wiadomością nr 68, aby uzyskać szczegółowe informacje o certyfikacie wysłanym przez serwer backendu, jak pokazano na tej ilustracji:
- Certyfikat serwera backendu i jego pełny łańcuch są dostępne w sekcji „Certyfikaty”, jak pokazano na ilustracji powyżej.
- Jeśli router (od strony północnej) lub procesor wiadomości (southbound) jest nieznany (jak w przykładzie powyżej), wykonaj te czynności:
- Pobierz certyfikat i jego łańcuch zapisany w konkretnym magazynie zaufania. (Sprawdź konfigurację hosta wirtualnego routera i docelowego punktu końcowego dla procesora wiadomości). Aby uzyskać szczegóły certyfikatu, możesz użyć tych interfejsów API:
-
Pobierz nazwę certyfikatu z magazynu zaufania:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
-
Pobierz szczegóły certyfikatu z magazynu zaufania:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
-
Pobierz nazwę certyfikatu z magazynu zaufania:
- Sprawdź, czy certyfikat przechowywany w magazynie zaufanych certyfikatów routera (northbound) lub procesor wiadomości (southbound) jest zgodny z certyfikatem przechowywanym w magazynie kluczy aplikacji klienta (na północ) lub na serwerze docelowym (southbound) albo z certyfikatem uzyskanym na podstawie danych wyjściowych
tcpdump
. Jeśli występuje niezgodność, jest ona przyczyną błędu uzgadniania połączenia TLS/SSL.
- Pobierz certyfikat i jego łańcuch zapisany w konkretnym magazynie zaufania. (Sprawdź konfigurację hosta wirtualnego routera i docelowego punktu końcowego dla procesora wiadomości). Aby uzyskać szczegóły certyfikatu, możesz użyć tych interfejsów API:
- Jeśli okaże się, że certyfikat jest nieznany przez aplikację kliencką (w kierunku północnym) lub przez serwer docelowy (południowy), wykonaj te czynności:
- Pobierz pełny łańcuch certyfikatów używany w certyfikacie zapisanym w konkretnym magazynie kluczy. Zapoznaj się z konfiguracją hosta wirtualnego routera i docelowego punktu końcowego procesora wiadomości. Aby uzyskać szczegóły certyfikatu, możesz użyć tych interfejsów API:
-
Uzyskaj nazwę certyfikatu z magazynu kluczy:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
-
Znajdź szczegóły certyfikatu w magazynie kluczy:
curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
-
Uzyskaj nazwę certyfikatu z magazynu kluczy:
- Sprawdź, czy certyfikat przechowywany w magazynie kluczy routera (na północ) lub przez procesor wiadomości (southbound) jest zgodny z certyfikatem zapisanym w magazynie zaufania aplikacji klienckiej (na północ) lub na serwerze docelowym (southbound) albo z certyfikatem uzyskanym na podstawie danych wyjściowych
tcpdump
. Jeśli występuje niezgodność, jest ona przyczyną błędu uzgadniania połączenia SSL.
- Pobierz pełny łańcuch certyfikatów używany w certyfikacie zapisanym w konkretnym magazynie kluczy. Zapoznaj się z konfiguracją hosta wirtualnego routera i docelowego punktu końcowego procesora wiadomości. Aby uzyskać szczegóły certyfikatu, możesz użyć tych interfejsów API:
- Jeśli okaże się, że certyfikat wysłany przez serwer/klienta stracił ważność, klient/serwer odbierający odrzuci certyfikat, a w
tcpdump
zobaczysz ten alert:Alert (Poziom: krytyczny, opis: certyfikat wygasł)
- Sprawdź, czy certyfikat w magazynie kluczy odpowiedniego hosta wygasł.
Rozdzielczość
Aby rozwiązać problem wskazany w powyższym przykładzie, prześlij prawidłowy certyfikat serwera backendu do instancji trustore w procesorze wiadomości.
W tabeli poniżej znajdziesz podsumowanie czynności, które należy wykonać, aby rozwiązać problem w zależności od jego przyczyny.
Przyczyna | Opis | Rozwiązanie |
Certyfikat wygasł |
NorthBound
|
Prześlij nowy certyfikat i jego pełny łańcuch do magazynu kluczy na odpowiednim hoście. |
SouthBound
|
Prześlij nowy certyfikat i jego pełny łańcuch do magazynu kluczy na odpowiednim hoście. | |
Nieznany certyfikat |
NorthBound
|
Prześlij prawidłowy certyfikat do magazynu zaufania na odpowiednim hoście. |
SouthBound
|
Prześlij prawidłowy certyfikat do magazynu zaufania na odpowiednim hoście. |
Serwer z włączoną usługą SNI
Nieudana próba uzgadniania połączenia TLS/SSL może wystąpić, gdy klient komunikuje się z serwerem z włączonym dodatkiem SNI, ale klient nie jest włączony. Może się to zdarzyć w jego części północnej lub południowej w Edge.
Najpierw musisz określić nazwę hosta i numer portu używanego serwera oraz sprawdzić, czy włączony jest SNI.
Identyfikacja serwera z włączonym SNI
- Wykonaj polecenie
openssl
i spróbuj połączyć się z odpowiednią nazwą hosta serwera (router brzegowy lub serwer backendu) bez przekazywania nazwy serwera, jak pokazano poniżej:openssl s_client -connect hostname:port
Możesz uzyskać certyfikaty i czasami może wystąpić błąd uzgadniania połączenia w poleceniu opensl, jak pokazano poniżej:
CONNECTED(00000003) 9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
- Wykonaj polecenie
openssl
i spróbuj połączyć się z odpowiednią nazwą hosta serwera (routerem brzegowym lub serwerem backendu), przesyłając nazwę serwera, jak pokazano poniżej:openssl s_client -connect hostname:port -servername hostname
- Jeśli w kroku 1 wystąpi błąd uzgadniania połączenia lub w kroku 1 i w kroku 2 uzyskasz inne certyfikaty, oznacza to, że określony serwer jest włączony w usłudze SNI.
Po sprawdzeniu, czy serwer ma włączoną obsługę SNI, możesz wykonać poniższe czynności, aby sprawdzić, czy błąd połączenia TLS/SSL nie jest spowodowany tym, że klient nie może połączyć się z serwerem SNI.
Diagnostyka
- Sprawdź, czy błąd wystąpił w połączeniu północnym czy southbound. Więcej wskazówek, które pomogą Ci w określeniu tego problemu, znajdziesz w artykule Ustalanie źródła problemu.
- Uruchom narzędzie
tcpdump, aby zebrać więcej informacji:
- Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
tcpdump
u odpowiedniego klienta lub serwera. Klientem może być aplikacja klienta (w przypadku połączeń przychodzących lub kierowanych na północ) albo procesor wiadomości (w przypadku połączeń wychodzących lub południowych). Serwerem może być router brzegowy (dla połączeń przychodzących lub kierowanych na północ) lub serwer backendu (dla połączeń wychodzących lub południowych) w zależności od tego, jak określono w kroku 1. - Jeśli jesteś użytkownikiem chmury publicznej, możesz zbierać dane
tcpdump
tylko w aplikacji klienckiej (w przypadku połączeń przychodzących lub kierowanych na północ) albo na serwerze backendu (na potrzeby połączeń wychodzących lub południowych), ponieważ nie masz dostępu do routera brzegowego ani procesora wiadomości.
tcpdump -i any -s 0 host IP address -w File name
Więcej informacji o używaniu poleceniatcpdump
znajdziesz w danych tcpdump. - Jeśli jesteś użytkownikiem Private Cloud, możesz zbierać dane
- Przeanalizuj dane wyjściowe
tcpdump
za pomocą Wireshark lub podobnego narzędzia. - Oto przykładowa analiza obiektu
tcpdump
przy użyciu programu Wireshark:- W tym przykładzie wystąpił błąd uzgadniania połączenia TLS/SSL między procesorem wiadomości brzegowych a serwerem backendu (połączenie wychodzące).
- Komunikat nr 4 w danych wyjściowych
tcpdump
poniżej oznacza, że procesor wiadomości (źródło) wysłał komunikat „Client Hello” do serwera backendu (miejsce docelowe). - Kliknięcie komunikatu „Cześć klienta” oznacza, że procesor wiadomości używa protokołu TLSv1.2.
- Komunikat nr 4 oznacza, że serwer backendu przyjmuje wiadomość „Cześć klienta” od procesora wiadomości.
- Serwer backendu natychmiast wysyła alert krytyczny : błąd uzgadniania połączenia do podmiotu przetwarzającego wiadomości (komunikat nr 5). Oznacza to, że uzgadnianie połączenia TLS/SSL nie powiodło się i połączenie zostanie zamknięte.
- W wiadomości nr 6 znajdziesz te informacje:
- Serwer backendu obsługuje protokół TLSv1.2. Oznacza to, że protokół został dopasowany między procesorem wiadomości a serwerem backendu.
- Jednak serwer backendu nadal wysyła alert krytyczny: błąd uzgadniania połączenia do podmiotu przetwarzającego wiadomości, jak pokazano na ilustracji poniżej:
- Ten błąd może wystąpić z jednego z tych powodów:
- Procesor wiadomości nie używa algorytmów zestawu szyfrów obsługiwanych przez serwer backendu.
- Serwer backendu ma włączoną obsługę SNI, ale aplikacja kliencka nie wysyła nazwy serwera.
- Zapoznaj się bardziej szczegółowo z komunikatem nr 3 (Cześć klienta) w danych wyjściowych
tcpdump
. Pamiętaj, że brakuje pola Rozszerzenie: nazwa_serwera, jak pokazano poniżej: - Jest to potwierdzenie, że procesor wiadomości nie wysłał wartości server_name do serwera backendu z obsługą SNI.
- Jest to przyczyna błędu uzgadniania połączenia TLS/SSL i powód, dla którego serwer backendu wysyła alert krytyczny: błąd uzgadniania połączenia do procesora wiadomości.
- Sprawdź, czy
jsse.enableSNIExtension property
wsystem.properties
ma wartość Fałsz w procesorze wiadomości, aby upewnić się, że ten procesor nie może komunikować się z serwerem obsługującym SNI.
Rozdzielczość
Włącz procesory wiadomości do komunikacji z serwerami obsługującymi SNI, wykonując te czynności:
- Utwórz plik
/opt/apigee/customer/application/message-processor.properties
(jeśli jeszcze nie istnieje). - Dodaj do tego pliku ten wiersz:
conf_system_jsse.enableSNIExtension=true
- Przenieś właściciela tego pliku na użytkownika
apigee:apigee
:chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Ponownie uruchom procesor wiadomości.
/opt/apigee/apigee-service/bin/apigee-service message-processor restart
- Jeśli masz więcej niż 1 procesor wiadomości, powtórz kroki od 1 do 4 w przypadku każdego z nich.
Jeśli nie możesz ustalić przyczyny błędu uzgadniania połączenia TLS/SSL i rozwiązać problem lub potrzebujesz dalszej pomocy, skontaktuj się z zespołem pomocy Apigee Edge. Podaj pełne informacje o problemie wraz z danymi wyjściowymi tcpdump
.