502 Bad Gateway – certyfikat podpisany samodzielnie w sieci

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:

  1. 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
    
  2. 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ść

  1. Skontaktuj się z zespołem, który jest właścicielem serwera docelowego, aby uzyskać odpowiedni certyfikat TLS podpisany przez zaufany urząd certyfikacji.
  2. 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

    1. Jeśli korzystasz z Dockera, zapoznaj się z informacjami dotyczącymi używania urzędu certyfikacji, który nie jest zaufany przez Node.js.
    2. 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

    1. 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.
    2. 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

  1. W tym przypadku serwer zarządzania (management.apigee-dev.net) może zwracać certyfikat TLS podpisany samodzielnie.
  2. Prawdopodobnie administrator systemu Apigee Edge dostarczył certyfikat i dysponuje jego kopią.
  3. 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
    
  4. Jeśli serwer zarządzania ma certyfikat podpisany samodzielnie, to jest przyczyną tego problemu.

Rozdzielczość

  1. Skontaktuj się z zespołem, który jest właścicielem serwera docelowego, aby uzyskać odpowiedni certyfikat TLS podpisany przez zaufany urząd certyfikacji.
  2. Jeśli nie jest to możliwe, wykonaj te czynności, aby zezwolić na samodzielnie podpisane certyfikaty w Edge Microgateway.

  3. Ustaw właściwość systemową, aby zezwolić Edge Microgateway na ufanie wszystkim certyfikatom.
  4. Jeśli korzystasz z Dockera, zapoznaj się z informacjami na temat używania urzędu certyfikacji, który nie jest zaufany przez Node.js.
  5. 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 pliku config.yaml (logging > dir parameter). Zalecamy zmianę log > level na info 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 konfiguracyjny default.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