Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
Aplikacja kliencka odbiera kod odpowiedzi HTTP 502
z komunikatem Bad Gateway
w odpowiedzi na wywołania interfejsu API w Edge Microgateway.
Może też wyświetlić się błąd self signed certificate in certificate
chain
podczas uruchamiania polecenia
edgemicro configure
.
Komunikat o błędzie
Klient zobaczy taki komunikat z odpowiedzią:
HTTP/1.1 502 Bad Gateway
Dwa typowe przykłady odpowiedzi o błędzie:
{"message":"self signed certificate in certificate chain","code":"SELF_SIGNED_CERT_IN_CHAIN"}
{"message":"self signed certificate","code":"DEPTH_ZERO_SELF_SIGNED_CERT"}
Ten błąd może też wystąpić podczas uruchamiania polecenia edgemicro configure
:
{ Error: self signed certificate in certificate chain at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34) at TLSSocket.emit (events.js:189:13) at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }
Możliwe przyczyny
Przyczyna | Opis | Instrukcje rozwiązywania problemów dotyczące |
---|---|---|
Serwer docelowy prezentuje certyfikat podpisany samodzielnie | Edge Microgateway sprawdzi certyfikat serwera docelowego, a jeśli nie jest zaufany, zgłosi błąd środowiska wykonawczego. | Użytkownicy chmury publicznej i prywatnej usługi Edge |
Serwer Apigee Edge Management Server używa certyfikatu podpisanego samodzielnie | Gdy konfigurujesz Edge Microgateway po raz pierwszy, w celu wczytywania łączy się ona z Apigee Edge przez TLS. Jeśli Edge wyświetli certyfikat podpisany samodzielnie, nie będzie to możliwe. | Użytkownicy chmury Private Cloud |
Przyczyna: serwer docelowy prezentuje certyfikat podpisany samodzielnie
Jeśli samodzielnie podpisany certyfikat zostanie przedstawiony przez serwer docelowy przy połączeniu południowym, Edge Microgateway domyślnie zgłosi ten błąd, ponieważ nie ufa certyfikatom podpisanym samodzielnie.
Diagnostyka
W dziennikach możesz zobaczyć taki błąd (/var/tmp/edgemicro-`hostname`-
*.log
):
2021-05-18T10:52:46.425Z [error][0:8000][1][gsc][test][edgemicro_badtargethost][][][2db53f80- b7c7-11eb-9abe-05b6297863f1][microgateway-core][][GET][502][self signed certificate in certificate chain][SELF_SIGNED_CERT_IN_CHAIN][]
Kod błędu SELF_SIGNED_CERT_IN_CHAIN
wskazuje, że Edge Microgateway otrzymała certyfikat podpisany samodzielnie z serwera docelowego. Aby to potwierdzić, wykonaj te czynności:
- Uruchom to polecenie
openssl
, aby sprawdzić łańcuch certyfikatów serwera docelowego:echo | openssl s_client -connect TARGET_SERVER_HOSTNAME:PORT -servername TARGET_SERVER_HOSTNAME | openssl x509 -noout
-
Jeśli łańcuch certyfikatów serwera docelowego jest rzeczywiście podpisany samodzielnie, to jest przyczyną problemu.
Zwróć uwagę, że w tym przykładzie serwer docelowy wyświetla certyfikat podpisany samodzielnie:
echo | openssl s_client -connect untrusted-root.badssl.com:443 -servername untrusted-root.badssl.com | openssl x509 -noout
depth=1 C = US, ST = California, L = San Francisco, O = BadSSL, CN = BadSSL Untrusted Root Certificate Authority verify error:num=19:self signed certificate in certificate chain verify return:0 DONE
Rozdzielczość
- Skontaktuj się z zespołem, który jest właścicielem serwera docelowego, aby uzyskać odpowiedni certyfikat TLS podpisany przez zaufany urząd certyfikacji.
Jeśli nie jest to możliwe, rozważ użycie jednej z poniższych opcji, aby zezwolić na certyfikaty podpisane samodzielnie w Edge Microgateway.
Opcja nr 1. Ustaw właściwość systemu, aby zezwolić Edge Microgateway na ufanie wszystkim certyfikatom
- Jeśli korzystasz z Dockera, zapoznaj się z informacjami dotyczącymi używania urzędu certyfikacji, który nie jest zaufany przez Node.js.
W przeciwnym razie wyeksportuj zmienną środowiskową o nazwie
NODE_EXTRA_CA_CERTS
, wskazującą główny plik urzędu certyfikacji.Zostało to opisane na oficjalnej stronie Node.js.
Opcja 2. Skonfiguruj plik konfiguracyjny YAML Microgateway, aby ufać temu konkretnemu certyfikatowi dla tego serwera docelowego
- Sprawdź, czy certyfikat (lub łańcuch) serwera docelowego jest w formacie PEM. Aby przekonwertować inne formaty certyfikatów na pliki PEM, postępuj zgodnie z instrukcjami podanymi w artykule Konwertowanie certyfikatów na obsługiwany format.
Jeśli istnieje łańcuch certyfikatów, sprawdź, czy są one we właściwej kolejności. Certyfikat liścia powinien zawsze być pierwszy, potem certyfikat pośredni, a następnie certyfikat główny. Więcej informacji na ten temat znajdziesz w artykule Weryfikowanie łańcucha certyfikatów.
W tym przykładzie skonfigurowaliśmy zaufany plik CA dla:
untrusted-root.badssl.com
.edgemicro: ... targets: - host: 'untrusted-root.badssl.com' ssl: client ca: /opt/apigee/certs/untrusted-root.pem
Instrukcje konfigurowania tej funkcji znajdziesz również w filmie Edge Microgateway Module – Skonfiguruj jedno- i dwukierunkowe protokół TLS w południowym zasięgu. Więcej informacji znajdziesz w artykule o konfigurowaniu SSL na serwerze Edge Microgateway.
Jeśli problem nadal występuje, przejdź do artykułu Wymagane jest zebranie informacji diagnostycznych.
Przyczyna: serwer Apigee Edge Management korzysta z certyfikatu podpisanego samodzielnie
Przy pierwszej konfiguracji Edge Microgateway konieczne jest uruchomienie polecenia edgemicro configure
lub edgemicro private configure
. To polecenie uruchomi klaster i połączy się z Apigee Edge w celu pobrania wymaganych informacji.
W przypadku chmury prywatnej brzegowej adres URL serwera zarządzania jest określany przez argument -m
.
Jeśli masz włączony protokół TLS dla serwera zarządzania, Edge Microgateway spróbuje zweryfikować certyfikat przedstawiany przez serwer zarządzania.
Przykładowe polecenie edgemicro configure
dla Edge Private Cloud jest następujące:
edgemicro private configure -u <username> -p <password> -o apigee -e dev -v secure -r https://apigee-dev.net -m https://management.apigee-dev.net:8443
Jeśli serwer zarządzania jest skonfigurowany z certyfikatem podpisanym samodzielnie, w danych wyjściowych konsoli pojawi się poniższy błąd.
{ Error: self signed certificate in certificate chain at TLSSocket.onConnectSecure (_tls_wrap.js:1051:34) at TLSSocket.emit (events.js:189:13) at TLSSocket._finishInit (_tls_wrap.js:633:8) code: 'SELF_SIGNED_CERT_IN_CHAIN' }
Diagnostyka
- W tym przypadku serwer zarządzania (
management.apigee-dev.net
) może zwracać certyfikat TLS podpisany samodzielnie. - Prawdopodobnie administrator systemu Apigee Edge dostarczył certyfikat i dysponuje jego kopią.
- W przeciwnym razie uruchom to polecenie, aby uzyskać informacje o certyfikacie:
echo | openssl s_client -connect management.apigee-dev.net:8443 -servername management.apigee-dev.net | openssl x509 -noout
- Jeśli serwer zarządzania ma certyfikat podpisany samodzielnie, to jest przyczyną tego problemu.
Rozdzielczość
- Skontaktuj się z zespołem, który jest właścicielem serwera docelowego, aby uzyskać odpowiedni certyfikat TLS podpisany przez zaufany urząd certyfikacji.
Jeśli nie jest to możliwe, wykonaj te czynności, aby zezwolić na samodzielnie podpisane certyfikaty w Edge Microgateway.
- Ustaw właściwość systemową, aby zezwolić Edge Microgateway na ufanie wszystkim certyfikatom.
- Jeśli korzystasz z Dockera, zapoznaj się z informacjami na temat używania urzędu certyfikacji, który nie jest zaufany przez Node.js.
- W przeciwnym razie wyeksportuj zmienną środowiskową o nazwie
NODE_EXTRA_CA_CERTS
, wskazującą główny plik urzędu certyfikacji.Dokumentację znajdziesz na oficjalnej stronie Node.js.
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:
- Pliki logu: domyślny folder to
/var/tmp
, ale może on zostać zastąpiony w głównym plikuconfig.yaml
(logging > dir parameter
). Zalecamy zmianęlog > level
nainfo
przed przekazaniem plików logu do działu pomocy Apigee Edge. - Plik konfiguracji: główna konfiguracja Edge Microgateway znajduje się w pliku YAML w domyślnym folderze Edge Microgateway
$HOME/.edgemicro
. Istnieje domyślny plik konfiguracyjnydefault.yaml
, a następnie po jednym dla każdego środowiska ORG-ENV-config.yaml
. Prześlij w całości ten plik dla organizacji i środowiska, których dotyczy problem.Dokumenty referencyjne
Skonfiguruj interfejs Edge tak, aby używał TLS do uzyskiwania dostępu do interfejsu Edge API