503 Usługa niedostępna – błąd uzgadniania połączenia SSL

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Krótki opis problemu

Aplikacja kliencka otrzymuje kod stanu HTTP 503 Service Unavailable z kodem błędu messaging.adaptors.http.flow.SslHandshakeFailed w odpowiedzi na wywołania interfejsu API.

Komunikat o błędzie

Aplikacja kliencka otrzymuje ten kod odpowiedzi:

HTTP/1.1 503 Service Unavailable

Możesz też zobaczyć ten komunikat o błędzie:

{
   "fault":{
      "faultstring":"SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target",
      "detail":{
         "errorcode":"messaging.adaptors.http.flow.SslHandshakeFailed"
      }
   }
}

Możliwe przyczyny

Kod stanu 503 Service Unavailable z kodem błędu messaging.adaptors.http.flow.SslHandshakeFailed może pojawić się z kilku powodów z powodu błędu podczas procesu uzgadniania protokołu SSL między procesorem komunikatów Apigee Edge a serwerem backendu. Komunikat o błędzie faultstring zwykle wskazuje możliwą przyczynę tego błędu.

W zależności od komunikatu o błędzie wyświetlanego w faultstring musisz użyć odpowiednich technik, aby rozwiązać problem. Z tego przewodnika dowiesz się, jak rozwiązać ten problem, jeśli w SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target faultstring pojawi się komunikat o błędzie.

Ten błąd występuje podczas procesu uzgadniania połączenia SSL między procesorem komunikatów Apigee Edge a serwerem backendu:

  • Jeśli truststore procesora komunikatów Apigee Edge:
    • zawiera łańcuch certyfikatów, który nie pasuje do pełnego łańcucha certyfikatów serwera backendu, LUB
    • Nie zawiera pełnego łańcucha certyfikatów serwera backendu
  • Jeśli łańcuch certyfikatów przedstawiony przez serwer backendu:

Możliwe przyczyny tego problemu:

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów w magazynie zaufanych certyfikatów procesora wiadomości Certyfikat lub jego łańcuch przechowywany w magazynie zaufanych certyfikatów procesora komunikatów Apigee Edge nie pasuje do łańcucha certyfikatów serwera backendu lub nie zawiera pełnego łańcucha certyfikatów serwera backendu. Użytkownicy Edge Private Cloud i Public Cloud
Niezgodność pełnej i jednoznacznej nazwy domeny w certyfikacie serwera backendu z nazwą hosta w docelowym punkcie końcowym Certyfikat przedstawiony przez serwer backendu zawiera pełną i jednoznaczną nazwę domeny, która nie jest zgodna z nazwą hosta podaną w docelowym punkcie końcowym. Użytkownicy Edge Private Cloud i Public Cloud
Serwer backendu przedstawił nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów Łańcuch certyfikatów przedstawiony przez serwer backendu jest nieprawidłowy lub niekompletny. Użytkownicy Edge Private Cloud i Public Cloud

Typowe etapy diagnostyki

Aby zdiagnozować ten błąd, użyj jednego z tych narzędzi lub technik:

Monitorowanie interfejsów API

Procedura 1. Korzystanie z monitorowania interfejsu API

Aby zdiagnozować błąd za pomocą monitorowania interfejsu API:

  1. Zaloguj się w interfejsie Apigee Edge jako użytkownik z  odpowiednią rolą.
  2. Przełącz się na organizację, w której chcesz zbadać problem.

  3. Otwórz stronę Analiza > Monitorowanie interfejsu API > Zbadaj.
  4. Wybierz konkretny przedział czasowy, w którym wystąpiły błędy.
  5. Wykreśl kod błędu na osi czasu.

  6. Wybierz komórkę z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed, jak pokazano poniżej:

    ( wyświetl większy obraz)

  7. Informacje o kodzie błędumessaging.adaptors.http.flow.SslHandshakeFailed są wyświetlane w sposób pokazany poniżej:

    ( wyświetl większy obraz)

  8. Kliknij Wyświetl logi i rozwiń wiersz nieudanego żądania.

    ( wyświetl większy obraz)

  9. W oknie Dzienniki zanotuj te informacje:
    • Identyfikator wiadomości z żądaniem
    • Kod stanu: 503
    • Źródło błędu: target
    • Kod błędu: messaging.adaptors.http.flow.SslHandshakeFailed

Śledzenie

Procedura 2. Używanie narzędzia Śledzenie

Aby zdiagnozować błąd za pomocą narzędzia Trace:

  1. Włącz śledzenie sesji i wybierz jedną z tych opcji:
    • Poczekaj na błąd 503 Service Unavailable o kodzie messaging.adaptors.http.flow.SslHandshakeFailed lub
    • Jeśli możesz odtworzyć problem, wykonaj wywołanie interfejsu API, aby go odtworzyć.503 Service Unavailable
  2. Sprawdź, czy opcja Pokaż wszystkie informacje o przepływach jest włączona:

  3. Wybierz jedno z nieudanych żądań i sprawdź ślad.
  4. Przeglądaj różne fazy śledzenia i sprawdź, gdzie wystąpił błąd.
  5. Błąd zwykle występuje po fazie Target Request Flow Started, jak pokazano poniżej:

    ( wyświetl większy obraz)

  6. Zapisz te wartości ze śladu:
    • błąd: SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.cause: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    • error.class: com.apigee.errors.http.server.ServiceUnavailableException
    • Wartość błędu SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target wskazuje, że uzgadnianie protokołu SSL nie powiodło się, ponieważ procesor komunikatów Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.
  7. W śladzie przejdź do fazy AX (Analytics Data Recorded) i kliknij ją.
  8. Przewiń w dół do sekcji Phase Details Error Headers (Nagłówki błędów szczegółów fazy) i określ wartości X-Apigee-fault-code, X-Apigee-fault-sourceX-Apigee-Message-ID, jak pokazano poniżej:

    ( wyświetl większy obraz)

  9. Zanotuj wartości X-Apigee-fault-code, X-Apigee-fault-source i X-Apigee-Message-ID:
  10. Nagłówki błędów Wartość
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Procedura 3. Korzystanie z dzienników dostępu NGINX

Aby zdiagnozować błąd za pomocą dzienników dostępu NGINX:

  1. Jeśli jesteś użytkownikiem chmury prywatnej, możesz używać dzienników dostępu NGINX do określania kluczowych informacji o żądaniach HTTP 503 Service Unavailable.
  2. Sprawdź logi dostępu NGINX:

    /opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log

  3. Sprawdź, czy w określonym czasie wystąpiły jakieś 503 błędy z kodem błędumessaging.adaptors.http.flow.SslHandshakeFailed (jeśli problem wystąpił w przeszłości) lub czy nadal występują jakieś nieudane żądania z kodem 503.
  4. Jeśli znajdziesz błędy 503, w których X-Apigee-fault-code ma wartość messaging.adaptors.http.flow.SslHandshakeFailed, określ wartość X-Apigee-fault-source.

    Przykładowy błąd 503 z dziennika dostępu NGINX:

    ( wyświetl większy obraz)

    Powyższy przykładowy wpis z dziennika dostępu NGINX zawiera te wartości atrybutów X-Apigee-fault-codeX-Apigee-fault-source:

    Nagłówki Wartość
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Dzienniki procesora komunikatów

Procedura 4. Korzystanie z dzienników procesora komunikatów

  1. Określ identyfikator wiadomości jednego z nieudanych żądań za pomocą narzędzia do monitorowania interfejsu API, narzędzia śledzenia lub dzienników dostępu NGINX zgodnie z opisem w artykule Typowe czynności diagnostyczne.
  2. Wyszukaj w dzienniku procesora komunikatów (/opt/apigee/var/log/edge-message-processor/logs/system.log) identyfikator konkretnej wiadomości z żądaniem. Może pojawić się następujący błąd:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR HTTP.CLIENT - HTTPClient$Context.handshakeFailed() :
    SSLClientChannel[Connected: Remote:X.X.X.X:443
    Local:192.168.194.140:55102]@64596 useCount=1
    bytesRead=0 bytesWritten=0 age=233ms  lastIO=233ms
    isOpen=true handshake failed, message: General SSLEngine problem
    

    Powyższy błąd oznacza, że nie udało się uzgodnić połączenia protokołu SSL między procesorem komunikatów a serwerem backendu.

    Nastąpi wyjątek ze szczegółowym zrzutem stosu, jak pokazano poniżej:

    org:myorg env:test api:MyProxy rev:1
    messageid:myorg-28247-3541813-1
    NIOThread@1 ERROR ADAPTORS.HTTP.FLOW - RequestWriteListener.onException() :
    RequestWriteListener.onException(HTTPRequest@1522922c)
    javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Handshaker.checkThrown(Handshaker.java:1478)
    	at sun.security.ssl.SSLEngineImpl.checkTaskThrown(SSLEngineImpl.java:535)
    	... <snipped>
    Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
    	at sun.security.ssl.Alerts.getSSLException(Alerts.java:203)
    	at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1728)
    	... <snipped>
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
    certification path to requested target
    	at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:397)
    	at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:302)
    	... <snipped>
      

    Zwróć uwagę, że niepowodzenie uzgadniania połączenia jest spowodowane:

    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

    Oznacza to, że uzgadnianie protokołu SSL nie powiodło się, ponieważ procesor komunikatów Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.

Przyczyna: nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów w magazynie zaufanych certyfikatów procesora wiadomości

Diagnostyka

  1. Określ kod błęduźródło błędu zaobserwowanego za pomocą monitorowania interfejsu API, narzędzia śledzenia lub dzienników dostępu NGINX zgodnie z opisem w typowych krokach diagnostycznych.
  2. Jeśli kod błędu to messaging.adaptors.http.flow.SslHandshakeFailed, określ komunikat o błędzie, korzystając z jednej z tych metod:
  3. Jeśli pojawi się komunikat o błędzie sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", oznacza to, że uzgadnianie protokołu SSL zakończyło się niepowodzeniem, ponieważ procesor komunikatów Apigee Edge nie mógł zweryfikować certyfikatu serwera backendu.

Ten problem możesz rozwiązać w 2 etapach:

  1. Etap 1. Określ łańcuch certyfikatów serwera backendu
  2. Etap 2. Porównaj łańcuch certyfikatów przechowywany w magazynie zaufanych certyfikatów procesora wiadomości.

Faza 1

Etap 1. Określ łańcuch certyfikatów serwera backendu

Aby określić łańcuch certyfikatów serwera backendu, użyj jednej z tych metod:

openssl

Wykonaj polecenie openssl na hoście serwera backendu w ten sposób:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

Zwróć uwagę na łańcuch certyfikatów w danych wyjściowych powyższego polecenia:

Przykładowy łańcuch certyfikatów serwera backendu z wyniku polecenia openssl:

Certificate chain
 0 s:/CN=mocktarget.apigee.net
   i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
 1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
 2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
   i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

tcpdump

  1. Jeśli jesteś użytkownikiem chmury publicznej, przechwyć pakiety TCP/IP na serwerze backendu.
  2. Jeśli jesteś użytkownikiem chmury prywatnej, możesz przechwytywać pakiety TCP/IP na serwerze backendu lub procesorze komunikatów. Najlepiej przechwytywać je na serwerze backendu, ponieważ pakiety są na nim odszyfrowywane.
  3. Aby przechwycić pakiety TCP/IP, użyj tego polecenia tcpdump:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Przeanalizuj pakiety TCP/IP za pomocą narzędzia Wireshark lub podobnego narzędzia, które znasz.

    Przykładowa analiza narzędzia Tcpdump

    ( wyświetl większy obraz)

    • Pakiet 43: procesor komunikatów (źródło) wysłałClient Hello wiadomość do serwera backendu (miejsce docelowe).
    • Pakiet 44: serwer backendu potwierdza otrzymanie wiadomościClient Hello z procesora komunikatów.
    • Pakiet 45: serwer backendu wysyła Server Hellowiadomość wraz z certyfikatem.
    • Pakiet 46: procesor wiadomości potwierdza otrzymanieServer Hello wiadomości i certyfikatu.
    • Pakiet 47: procesor komunikatów wysyła wiadomość FIN, ACK, a następnie RST, ACKpakiecie 48.

      Oznacza to, że weryfikacja certyfikatu serwera backendu przez procesor komunikatów zakończyła się niepowodzeniem. Dzieje się tak, ponieważ procesor komunikatów nie ma certyfikatu, który pasuje do certyfikatu serwera backendu, lub nie może zaufać certyfikatowi serwera backendu za pomocą certyfikatów dostępnych w swoim (procesora komunikatów) magazynie zaufanych certyfikatów.

    • Możesz wrócić do pakietu 45 i sprawdzić łańcuch certyfikatów wysłany przez serwer backendu.

      ( wyświetl większy obraz)

    • W tym przykładzie widać, że serwer wysłał certyfikat liścia z wartością common name (CN) = mocktarget.apigee.net, a następnie certyfikat pośredni z wartością CN= GTS CA 1D4 i certyfikat główny z wartością CN = GTX Root R1.

    Jeśli stwierdzisz, że weryfikacja certyfikatu serwera nie powiodła się, przejdź do Fazy 2. Porównaj certyfikat serwera backendu z certyfikatami przechowywanymi w magazynie zaufanych certyfikatów procesora wiadomości.

Faza 2

Etap 2. Porównaj certyfikat serwera backendu z certyfikatami przechowywanymi w magazynie zaufanych certyfikatów procesora wiadomości

  1. Określ łańcuch certyfikatów serwera backendu.
  2. Określ certyfikat przechowywany w magazynie zaufanych certyfikatów procesora wiadomości, wykonując te czynności:
    1. Pobierz nazwę odwołania do magazynu zaufanych certyfikatów z elementu TrustStore w sekcji SSLInfo w pliku TargetEndpoint.

      Przyjrzyjmy się przykładowej sekcji SSLInfoTargetEndpoint konfiguracji:

      <TargetEndpoint name="default">
      ...
         <HTTPTargetConnection>
            <Properties />
            <SSLInfo>
               <Enabled>true</Enabled>
               <ClientAuthEnabled>true</ClientAuthEnabled>
               <KeyStore>ref://myKeystoreRef</KeyStore>
               <KeyAlias>myKey</KeyAlias>
               <TrustStore>
                  ref://myCompanyTrustStoreRef
               </TrustStore>
            </SSLInfo>
         </HTTPTargetConnection>
         ...
      </TargetEndpoint>
    2. W powyższym przykładzie nazwa odwołania TrustStore to myCompanyTruststoreRef.
    3. W interfejsie Edge wybierz Środowiska > Pliki referencyjne. Zwróć uwagę na nazwę w kolumnie Reference (Odwołanie) dla konkretnego odwołania do magazynu zaufanych certyfikatów. Będzie to nazwa magazynu zaufanych certyfikatów.

      ( wyświetl większy obraz)

    4. W powyższym przykładzie nazwa magazynu zaufanych certyfikatów to:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Pobierz certyfikaty przechowywane w magazynie zaufanych certyfikatów (określonym w poprzednim kroku) za pomocą tych interfejsów API:

    1. Pobierz wszystkie certyfikaty z magazynu kluczy lub magazynu zaufanych certyfikatów Ten interfejs API zawiera listę wszystkich certyfikatów w określonym magazynie zaufanych certyfikatów.

      Użytkownik chmury publicznej:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Użytkownik Private Cloud:

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs -H "Authorization: Bearer $TOKEN"
      

      Gdzie:

      • ORGANIZATION_NAME to nazwa organizacji.
      • ENVIRONMENT_NAME to nazwa środowiska
      • KEYSTORE_NAME to nazwa magazynu kluczy.
      • Zmienna $TOKEN jest ustawiona na token dostępu OAuth 2.0 zgodnie z opisem w sekcji Uzyskiwanie tokena dostępu OAuth 2.0.
      • curl opcje użyte w tym przykładzie są opisane w artykule Używanie curl.

      Przykładowe dane wyjściowe:

      Certyfikaty z przykładowego magazynu zaufanych certyfikatów myCompanyTruststore to:

      [
        "serverCert"
      ]
    2. Pobierz szczegóły konkretnego certyfikatu z magazynu kluczy lub magazynu zaufanych certyfikatów. Ten interfejs API zwraca informacje o konkretnym certyfikacie w określonym magazynie zaufanych certyfikatów.

      Użytkownik chmury publicznej:

      curl -v -X GET https//api.enterprise.apigee.com/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Użytkownik chmury Private Cloud

      curl -v -X GET http://MANAGEMENT_HOST:PORT_#>/v1/organizations/ORGANIZATION_NAME/environments/ENVIRONMENT_NAME/keystores/KEYSTORE_NAME/certs/CERT_NAME -H "Authorization: Bearer $TOKEN"
      

      Gdzie:

      • ORGANIZATION_NAME to nazwa organizacji.
      • ENVIRONMENT_NAME to nazwa środowiska
      • KEYSTORE_NAME to nazwa magazynu kluczy.
      • CERT_NAME to nazwa certyfikatu.
      • Zmienna $TOKEN jest ustawiona na token dostępu OAuth 2.0 zgodnie z opisem w sekcji Uzyskiwanie tokena dostępu OAuth 2.0.
      • curl opcje użyte w tym przykładzie są opisane w artykule Używanie curl.

      Przykładowe dane wyjściowe

      Szczegóły serverCert zawierają temat i wystawcę w tym formacie:

      Certyfikat liścia/podmiotu:

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",

      Certyfikat pośredni:

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",
  4. Sprawdź, czy rzeczywisty certyfikat serwera uzyskany w kroku 1 i certyfikat przechowywany w magazynie zaufanych certyfikatów uzyskany w kroku 3 są zgodne. Jeśli się nie zgadzają, to jest to przyczyna problemu.

    Na podstawie powyższego przykładu przeanalizujmy po kolei poszczególne certyfikaty:

    1. Certyfikat wierzchołka ścieżki:

      Z serwera backendu:

      s:/CN=mocktarget.apigee.net
      i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4

      Z magazynu zaufanych certyfikatów procesora wiadomości (klienta):

      "subject": "CN=mocktarget.apigee.net",
      "issuer": "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",

      Certyfikat liścia przechowywany w magazynie zaufanych certyfikatów jest zgodny z certyfikatem serwera backendu.

    2. Certyfikat pośredni:

      Z serwera backendu:

      s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

      Z magazynu zaufanych certyfikatów procesora wiadomości (klienta):

      "subject" : "CN=GTS CA 1D4, O=Google Trust Services LLC, C=US",
      "issuer" : "CN=GTS Root R1, O=Google Trust Services LLC, C=US",

      Certyfikat pośredni przechowywany w magazynie zaufanych certyfikatów jest zgodny z certyfikatem serwera backendu.

    3. Certyfikat główny:

      Z serwera backendu:

      s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
      i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1

      W magazynie zaufanych certyfikatów procesora wiadomości całkowicie brakuje certyfikatu głównego.

    4. Ponieważ w magazynie zaufanych certyfikatów brakuje certyfikatu głównego, procesor komunikatów zgłasza ten wyjątek:

      sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

      i zwraca kod błędu 503 Service Unavailable messaging.adaptors.http.flow.SslHandshakeFailed do aplikacji klienckich.

Rozdzielczość

  1. Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.
  2. Jeśli jesteś użytkownikiem chmury publicznej, postępuj zgodnie z instrukcjami w artykule Aktualizowanie certyfikatu TLS w chmurze, aby zaktualizować certyfikat w magazynie zaufania procesora wiadomości Apigee Edge.
  3. Jeśli jesteś użytkownikiem chmury prywatnej, postępuj zgodnie z instrukcjami w artykule Aktualizowanie certyfikatu protokołu TLS w chmurze prywatnej, aby zaktualizować certyfikat w magazynie zaufanych certyfikatów procesora komunikatów Apigee Edge.

Przyczyna: niezgodność pełnej i jednoznacznej nazwy domeny w certyfikacie serwera backendu z nazwą hosta w docelowym punkcie końcowym

Jeśli serwer backendu przedstawi łańcuch certyfikatów zawierający pełną i jednoznaczną nazwę domeny, która nie jest zgodna z nazwą hosta podaną w docelowym punkcie końcowym, procesor wiadomości Apigee Edge zwróci błąd SSL Handshake failed sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

Diagnostyka

  1. Sprawdź konkretny punkt końcowy docelowy w proxy interfejsu API, w którym występuje ten błąd, i zanotuj nazwę hosta serwera backendu:

    Przykładowy element TargetEndpoint:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.company.com/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>

    W przykładzie powyżej nazwa hosta serwera backendu to backend.company.com.

  2. Określ w certyfikacie serwera backendu w pełni kwalifikowaną nazwę domeny za pomocą polecenia openssl, jak pokazano poniżej:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    Na przykład:

    openssl s_client -connect backend.company.com:443
    

    Sprawdź sekcję Certificate chain i zwróć uwagę na w pełni kwalifikowaną nazwę domeny podaną jako część CN w temacie certyfikatu liścia.

    Certificate chain
     0 s:/CN=backend.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
     2 s:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
    

    W powyższym przykładzie pełna i jednoznaczna nazwa serwera backendu to backend.apigee.net.

  3. Jeśli nazwa hosta serwera backendu uzyskana w kroku 1 i w pełni kwalifikowana nazwa domeny uzyskana w kroku 2 nie są zgodne, to jest to przyczyną błędu.
  4. W omówionym powyżej przykładzie nazwa hosta w docelowym punkcie końcowym to backend.company.com. Jednak nazwa FQDN w certyfikacie serwera backendu to backend.apigee.net. Ponieważ nie są one identyczne, pojawia się ten błąd.

Rozdzielczość

Możesz rozwiązać ten problem, korzystając z jednej z tych metod:

Prawidłowa pełna i jednoznaczna nazwa domeny

Zaktualizuj magazyn kluczy serwera backendu, podając prawidłową pełną i jednoznaczną nazwę domeny oraz ważny i kompletny łańcuch certyfikatów:

  1. Jeśli nie masz certyfikatu serwera backendu z prawidłową nazwą FQDN, uzyskaj odpowiedni certyfikat od właściwego urzędu certyfikacji.
  2. Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.

  3. Gdy będziesz mieć prawidłowy i kompletny łańcuch certyfikatów z prawidłową pełną i jednoznaczną nazwą domeny serwera backendu w certyfikacie liścia lub encji, która jest identyczna z nazwą hosta podaną w docelowym punkcie końcowym, zaktualizuj magazyn kluczy backendu za pomocą kompletnego łańcucha certyfikatów.

Poprawny serwer backendu

Zaktualizuj punkt końcowy docelowy, podając prawidłową nazwę hosta serwera backendu:

  1. Jeśli nazwa hosta została nieprawidłowo określona w docelowym punkcie końcowym, zaktualizuj docelowy punkt końcowy, aby zawierał prawidłową nazwę hosta zgodną z w pełni kwalifikowaną nazwą domeny w certyfikacie serwera backendu.
  2. Zapisz zmiany w proxy interfejsu API.

    W omówionym powyżej przykładzie, jeśli nazwa hosta serwera backendu została nieprawidłowo określona, możesz to naprawić, używając pełnej i jednoznacznej nazwy domeny z certyfikatu serwera backendu, czyli backend.apigee.net, w ten sposób:

    <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
          <Properties />
          <SSLInfo>
             <Enabled>true</Enabled>
             <TrustStore>ref://myTrustStoreRef</TrustStore>
          </SSLInfo>
          <URL>https://backend.apigee.net/resource</URL>
       </HTTPTargetConnection>
    </TargetEndpoint>

Przyczyna: nieprawidłowy lub niekompletny certyfikat lub łańcuch certyfikatów przedstawiony przez serwer backendu

Diagnostyka

  1. Pobierz łańcuch certyfikatów serwera backendu, wykonując polecenie openssl w odniesieniu do nazwy hosta serwera backendu w ten sposób:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Zanotuj wartość Certificate chain z danych wyjściowych powyższego polecenia.

    Przykładowy łańcuch certyfikatów serwera backendu z wyniku polecenia openssl:

    Certificate chain
     0 s:/CN=mocktarget.apigee.net
       i:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
     1 s:/C=US/O=Google Trust Services LLC/CN=GTS CA 1D4
       i:/C=US/O=Google Trust Services LLC/CN=GTS Root R1
       
  2. Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów, zgodnie z opisem w sekcji Weryfikowanie łańcucha certyfikatów.
  3. Jeśli nie masz prawidłowego i kompletnego łańcucha certyfikatów serwera backendu, to jest to przyczyna tego problemu.

    W przykładowym łańcuchu certyfikatów serwera backendu pokazanym powyżej brakuje certyfikatu głównego. Dlatego pojawia się ten błąd.

Rozdzielczość

Zaktualizuj magazyn kluczy serwera backendu o prawidłowy i kompletny łańcuch certyfikatów:

  1. Sprawdź, czy masz prawidłowy i kompletny łańcuch certyfikatów serwera backendu.

  2. Zaktualizuj prawidłowy i kompletny łańcuch certyfikatów w magazynie kluczy serwera backendu.

Jeśli problem nadal występuje, przejdź do sekcji Musisz zebrać informacje diagnostyczne.

musi zbierać informacje diagnostyczne;

Jeśli problem nadal występuje po wykonaniu powyższych instrukcji, zbierz te informacje diagnostyczne i skontaktuj się z zespołem pomocy Apigee Edge:

  • Jeśli jesteś użytkownikiem chmury publicznej, podaj te informacje:
    • Nazwa organizacji
    • Nazwa środowiska
    • Nazwa proxy interfejsu API
    • Wykonaj polecenie curl, aby odtworzyć błąd
    • Plik śledzenia z błędem
    • Dane wyjściowe polecenia openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Pakiety TCP/IP przechwycone na serwerze backendu
  • Jeśli jesteś użytkownikiem Private Cloud, podaj te informacje:

Odniesienia