Servizio 503 non disponibile - Errore di handshake SSL

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

L'applicazione client riceve un codice di stato HTTP 503 Service Unavailable con il codice di errore messaging.adaptors.http.flow.SslHandshakeFailed come risposta per le chiamate API.

Messaggio di errore

L'applicazione client riceve il seguente codice di risposta:

HTTP/1.1 503 Service Unavailable

Inoltre, potresti visualizzare il seguente messaggio di errore:

{
   "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"
      }
   }
}

Possibili cause

Potresti ricevere il codice di stato 503 Service Unavailable con il codice di errore messaging.adaptors.http.flow.SslHandshakeFailed a causa di un errore durante il processo di handshake SSL tra il processore di messaggi di Apigee Edge e il server di backend per una serie di motivi. Il messaggio di errore in faultstring in genere indica una possibile causa di alto livello che ha causato questo errore.

A seconda del messaggio di errore osservato in faultstring, devi utilizzare tecniche appropriate per risolvere il problema. Questo playbook spiega come risolvere questo errore se si visualizza il messaggio di errore 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 in faultstring.

Questo errore si verifica durante il processo di handshake SSL tra il processore di messaggi di Apigee Edge e il server di backend:

  • Se il truststore del processore di messaggi di Apigee Edge:
    • Contiene una catena di certificati che non corrisponde alla catena di certificati completa del server di backend OPPURE
    • Non contiene la catena di certificati completa del server di backend
  • Se la catena di certificati presentata dal server di backend:
    • Contiene un nome di dominio completo (FQDN) che non corrisponde al nome host specificato nell'endpoint di destinazione
    • Contiene una catena di certificati errata o incompleta

Le possibili cause di questo problema sono le seguenti:

Causa Descrizione Istruzioni per la risoluzione dei problemi applicabili a
Certificato o catena di certificati errata/incompleta nell'archivio di attendibilità dell'elaboratore di messaggi Il certificato e/o la relativa catena archiviati nell'archivio attendibilità del processore di messaggi di Apigee Edge non corrispondono alla catena di certificati del server di backend o non contengono la catena di certificati completa del server di backend. Utenti di cloud privato e pubblico Edge
Mancata corrispondenza del nome di dominio completo nel certificato del server di backend e nel nome host nell'endpoint di destinazione Il certificato presentato dal server di backend contiene un nome di dominio completo (FQDN) che non corrisponde al nome host specificato nell'endpoint di destinazione. Utenti di cloud privato e pubblico Edge
Catena di certificati o certificato errato/incompleto presentato dal server di backend La catena di certificati presentata dal server di backend è errata o incompleta. Utenti di cloud privato e pubblico Edge

Passaggi di diagnosi più comuni

Utilizza uno dei seguenti strumenti/tecniche per diagnosticare questo errore:

Monitoraggio delle API

Procedura 1: utilizzo del monitoraggio delle API

Per diagnosticare l'errore utilizzando il monitoraggio delle API:

  1. Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
  2. Passa all'organizzazione in cui vuoi esaminare il problema.

  3. Vai alla pagina Analizza > Monitoraggio API > Esamina.
  4. Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
  5. Traccia Codice di errore su Ora.

  6. Seleziona una cella con il codice di errore messaging.adaptors.http.flow.SslHandshakeFailed come mostrato di seguito:

    ( visualizza immagine ingrandita)

  7. Le informazioni sul codice di errore messaging.adaptors.http.flow.SslHandshakeFailed vengono visualizzate come mostrato di seguito:

    ( visualizza immagine ingrandita)

  8. Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.

    ( visualizza immagine ingrandita)

  9. Nella finestra Log, prendi nota dei seguenti dettagli:
    • ID messaggio di richiesta
    • Codice di stato: 503
    • Origine errore: target
    • Codice di errore: messaging.adaptors.http.flow.SslHandshakeFailed

Traccia

Procedura 2: utilizzo dello strumento Trace

Per diagnosticare l'errore utilizzando lo strumento Trace:

  1. Abilita la sessione di traccia e
    • Attendi che si verifichi l'errore 503 Service Unavailable con il codice di errore messaging.adaptors.http.flow.SslHandshakeFailed oppure
    • Se riesci a riprodurre il problema, esegui la chiamata API per riprodurlo 503 Service Unavailable
  2. Assicurati che l'opzione Mostra tutte le FlowInfos sia abilitata:

  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
  5. In genere, l'errore viene visualizzato dopo la fase Inizio del flusso di richiesta target, come mostrato di seguito:

    ( visualizza immagine ingrandita)

  6. Prendi nota dei valori di quanto segue dalla traccia:
    • errore: 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
    • Il valore dell'errore 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 indica che l'handshake SSL non è riuscito perché il processore di messaggi di Apigee Edge non è riuscito a convalidare il certificato del server di backend.
  7. Vai alla fase AX (Analytics Data Recorded) della traccia e fai clic.
  8. Scorri verso il basso fino alla sezione Intestazioni degli errori nei dettagli della fase e determina i valori di X-Apigee-fault-code, X-Apigee-fault-source e X-Apigee-Message-ID, come mostrato di seguito:

    ( visualizza immagine ingrandita)

  9. Prendi nota dei valori di X-Apigee-fault-code, X-Apigee-fault-source e X-Apigee-Message-ID:
  10. Intestazioni degli errori Valore
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target
    X-Apigee-Message-ID MESSAGE_ID

NGINX

Procedura 3: utilizzo dei log degli accessi di NGINX

Per diagnosticare l'errore utilizzando i log degli accessi di NGINX:

  1. Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave su HTTP 503 Service Unavailable.
  2. Controlla i log degli accessi di NGINX:

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

  3. Cerca per vedere se si sono verificati errori 503 con il codice di errore messaging.adaptors.http.flow.SslHandshakeFailed durante un periodo di tempo specifico (se il problema si è verificato in passato) o se ci sono ancora richieste che continuano a non funzionare con 503.
  4. Se riscontri errori 503 con X-Apigee-fault-code corrispondente al valore di messaging.adaptors.http.flow.SslHandshakeFailed, determina il valore di X-Apigee-fault-source.

    Esempio di errore 503 dal log degli accessi di NGINX:

    ( visualizza immagine ingrandita)

    La voce di esempio sopra riportata dal log degli accessi di NGINX ha i seguenti valori per X-Apigee-fault-code e X-Apigee-fault-source:

    Intestazioni Valore
    X-Apigee-fault-code messaging.adaptors.http.flow.SslHandshakeFailed
    X-Apigee-fault-source target

Log del processore di messaggi

Procedura 4: utilizzo dei log del processore di messaggi

  1. Determina l'ID messaggio di una delle richieste con esito negativo utilizzando API Monitoring, lo strumento Trace o i log degli accessi NGINX, come spiegato nella sezione Passaggi di diagnostica comuni.
  2. Cerca l'ID messaggio della richiesta specifico nel log dell'elaborazione dei messaggi (/opt/apigee/var/log/edge-message-processor/logs/system.log). Potresti notare il seguente errore:

    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
    

    L'errore riportato sopra indica che l'handshake SSL non è riuscito tra il processore di messaggi e il server di backend.

    Seguirà un'eccezione con un'analisi dettagliata dello stack, come mostrato di seguito:

    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>
      

    Tieni presente che l'errore di handshake è dovuto a:

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

    Questo indica che l'handshake SSL non è riuscito perché il processore di messaggi di Apigee Edge non è riuscito a convalidare il certificato del server di backend.

Causa: catena di certificati o certificato errato/incompleto nell'archivio attendibilità del processore di messaggi

Diagnostica

  1. Determina il codice di errore e l'origine dell'errore per l'errore osservato mediante l'utilizzo di API Monitoring, strumento Trace o log degli accessi NGINX, come spiegato nella sezione Passaggi comuni della diagnostica.
  2. Se il codice di errore è messaging.adaptors.http.flow.SslHandshakeFailed, determina il messaggio di errore utilizzando uno dei seguenti metodi:
  3. Se il messaggio di errore è sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target", significa che l'handshake SSL non è riuscito perché il processore di messaggi di Apigee Edge non è riuscito a convalidare il certificato del server di backend.

Puoi eseguire il debug di questo problema in due fasi:

  1. Fase 1: determinazione della catena di certificati del server di backend
  2. Fase 2: confronta la catena di certificati archiviata nell'archivio attendibilità del processore di messaggi

Fase 1

Fase 1: determinazione della catena di certificati del server di backend

Utilizza uno dei seguenti metodi per determinare la catena di certificati del server di backend:

openssl

Esegui il comando openssl sul nome host del server di backend come segue:

openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT#

Prendi nota della catena di certificati nell'output del comando riportato sopra:

Catena di certificati del server di backend di esempio dall'output del comando beginsl:

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. Se sei un utente del cloud pubblico, acquisisci i pacchetti TCP/IP sul server di backend.
  2. Se sei un utente Private Cloud, puoi acquisire i pacchetti TCP/IP sul server di backend o sul processore di messaggi. Preferibilmente, acquisiscili sul server di backend mentre i pacchetti vengono decriptati sul server di backend.
  3. Utilizza il seguente comando tcpdump per acquisire i pacchetti TCP/IP:

    tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
    
  4. Analizza i pacchetti TCP/IP con lo strumento Wireshark o uno strumento simile che conosci.

    Analisi di esempio di Tcpdump

    ( visualizza immagine ingrandita)

    • Pacchetto 43: il processore di messaggi (origine) ha inviato un messaggio Client Hello al server di backend (destinazione).
    • Pacchetto 44: il server di backend conferma la ricezione del messaggio Client Hello dal processore di messaggi.
    • Pacchetto #45: il server di backend invia il messaggio Server Hello insieme al certificato.
    • Pacchetto #46: il processore di messaggi conferma la ricezione del messaggio Server Hello e del certificato.
    • Pacchetto 47: il processore di messaggi invia un messaggio FIN, ACK seguito da RST, ACK nel Pacchetto 48.

      Indica che la convalida del certificato del server di backend da parte del processore di messaggi non è riuscita. Il motivo è che il processore di messaggi non ha alcun certificato che corrisponda al certificato del server di backend o non può considerare attendibile il certificato del server di backend con i certificati disponibili nel suo archivio attendibilità (processore di messaggi).

    • Puoi tornare indietro ed esaminare il Pacchetto n. 45 e determinare la catena di certificati inviata dal server di backend

      ( visualizza immagine ingrandita)

    • In questo esempio, puoi vedere che il server ha inviato un certificato foglia con common name (CN) = mocktarget.apigee.net, seguito da un certificato intermedio con CN= GTS CA 1D4 e da un certificato radice con CN = GTX Root R1.

    Se hai verificato che la convalida della certificazione del server non è riuscita, vai alla fase 2: confronta il certificato e i certificati del server di backend archiviati nell'archivio di attendibilità del processore di messaggi.

Fase 2

Fase 2: confronta il certificato e i certificati del server di backend archiviati nel truststore del processore di messaggi

  1. Determina la catena di certificati del server di backend.
  2. Per determinare il certificato archiviato nel truststore del processore di messaggi:
    1. Recupera il nome di riferimento dell'archivio attendibilità dall'elemento TrustStore nella sezione SSLInfo di TargetEndpoint.

      Diamo un'occhiata a una sezione SSLInfo di esempio in una configurazione TargetEndpoint:

      <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. Nell'esempio precedente, il nome di riferimento TrustStore è myCompanyTruststoreRef.
    3. Nell'interfaccia utente di Edge, seleziona Ambienti > Riferimenti. Prendi nota del nome nella colonna Riferimento per il riferimento specifico dell'archivio attendibilità. Questo sarà il nome del tuo archivio attendibilità.

      ( visualizza immagine ingrandita)

    4. Nell'esempio precedente, il nome dell'archivio attendibilità è:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Recupera i certificati archiviati nell'archivio attendibilità (determinato nel passaggio precedente) utilizzando le seguenti API:

    1. Ottieni tutti i certificati per un archivio chiavi o un archivio attendibilità. Questa API elenca tutti i certificati nell'archivio di attendibilità specifico.

      Utente del cloud pubblico:

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

      Utente 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"
      

      Dove:

      • ORGANIZATION_NAME è il nome dell'organizzazione
      • ENVIRONMENT_NAME è il nome dell'ambiente
      • KEYSTORE_NAME è il nome dell'archivio chiavi
      • $TOKEN sia impostato sul token di accesso OAuth 2.0 come descritto in Ottenere un token di accesso per OAuth 2.0
      • Le opzioni curl utilizzate in questo esempio sono descritte in Utilizzare curl

      Esempio di output:

      I certificati dell'archivio di attendibilità di esempio myCompanyTruststore sono:

      [
        "serverCert"
      ]
      

    2. Ottieni i dettagli del certificato specifico da un archivio chiavi o da un archivio attendibilità. Questa API restituisce le informazioni su un certificato specifico nell'archivio attendibilità specifico.

      Utente del cloud pubblico:

      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"
      

      Utente 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"
      

      Dove:

      • ORGANIZATION_NAME è il nome dell'organizzazione
      • ENVIRONMENT_NAME è il nome dell'ambiente
      • KEYSTORE_NAME è il nome dell'archivio chiavi
      • CERT_NAME è il nome del certificato
      • $TOKEN sia impostato sul token di accesso OAuth 2.0 come descritto in Ottenere un token di accesso per OAuth 2.0
      • Le opzioni curl utilizzate in questo esempio sono descritte in Utilizzare curl

      Esempio di output

      I dettagli di serverCert mostrano l'oggetto e l'emittente come segue:

      Fogliolina/certificato di entità:

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

      Certificato intermedio:

      "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. Verifica che il certificato del server effettivo ottenuto nel passaggio 1 e il certificato archiviato nell'archivio attendibilità ottenuto nel passaggio 3 corrispondano. Se non corrispondono, è questo il motivo.

    Nell'esempio riportato sopra, diamo un'occhiata a un certificato alla volta:

    1. Certificato Fogliolina:

      Dal server di backend:

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

      Dal truststore (client) del processore di messaggi:

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

      Il certificato foglia archiviato nell'archivio attendibilità corrisponde a quello del server di backend.

    2. Certificato intermedio:

      Dal server di backend:

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

      Dal truststore (client) del processore di messaggi:

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

      Il certificato intermedio archiviato nell'archivio attendibilità corrisponde a quello del server di backend.

    3. Certificato radice:

      Dal server di backend:

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

      Il certificato radice è completamente mancante nel truststore del processore di messaggi.

    4. Poiché il certificato radice manca nell'archivio attendibilità, il processore di messaggi genera la seguente eccezione:

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

      e restituisce 503 Service Unavailable con il codice di errore messaging.adaptors.http.flow.SslHandshakeFailed alle applicazioni client.

Risoluzione

  1. Assicurati di avere la catena di certificati corretta e completa del server di backend.
  2. Se sei un utente del cloud pubblico, segui le istruzioni in Aggiornare un certificato TLS per il cloud per aggiornare il certificato nell'archivio attendibilità del processore di messaggi di Apigee Edge.
  3. Se sei un utente Private Cloud, segui le istruzioni in Aggiornare un certificato TLS per il cloud privato per aggiornare il certificato nell'archivio attendibilità del processore di messaggi di Apigee Edge.

Causa: mancata corrispondenza del nome di dominio completo nel certificato del server di backend e nel nome host nell'endpoint di destinazione

Se il server di backend presenta una catena di certificati contenente il nome di dominio completo (FQDN) che non corrisponde al nome host specificato nell'endpoint di destinazione, il processo dei messaggi di Apigee Edge restituisce l'errore 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.

Diagnostica

  1. Esamina l'endpoint di destinazione specifico nel proxy API in cui riscontri questo errore e prendi nota del nome host del server di backend:

    Esempio di TargetEndpoint:

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

    Nell'esempio precedente, il nome host del server di backend è backend.company.com.

  2. Determina il nome di dominio completo nel certificato del server di backend utilizzando il comando openssl come mostrato di seguito:

    openssl s_client -connect BACKEND_SERVER_HOST_NAME>:PORT_#>
    

    Ad esempio:

    openssl s_client -connect backend.company.com:443
    

    Esamina la sezione Certificate chain e prendi nota del nome di dominio completo specificato come parte di CN nell'oggetto del certificato foglia.

    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
    

    Nell'esempio precedente, il nome di dominio completo del server di backend è backend.apigee.net.

  3. Se il nome host del server di backend ottenuto dal passaggio 1 e il nome di dominio completo ottenuto dal passaggio 2 non corrispondono, questa è la causa dell'errore.
  4. Nell'esempio discusso sopra, il nome host nell'endpoint di destinazione è backend.company.com. Tuttavia, il nome del nome di dominio completo nel certificato del server di backend è backend.apigee.net. Poiché non corrispondono, viene visualizzato questo errore.

Risoluzione

Puoi risolvere il problema utilizzando uno dei seguenti metodi:

Nome di dominio completo corretto

Aggiorna l'archivio chiavi del server di backend con un nome di dominio completo corretto e una catena di certificati valida e completa:

  1. Se non hai un certificato del server di backend con il nome di dominio completo corretto, richiedi il certificato corretto a una CA (autorità di certificazione) appropriata.
  2. Conferma di avere una catena di certificati valida e completa del server di backend.

  3. Quando hai la catena di certificati valida e completa con il nome di dominio completo corretto del server di backend nel certificato dell'entità o dell'entità che è identico al nome host specificato nell'endpoint di destinazione, aggiorna l'archivio chiavi del backend con la catena di certificati completa.

Server di backend corretto

Aggiorna l'endpoint di destinazione con il nome host del server di backend corretto:

  1. Se il nome host è stato specificato in modo errato nell'endpoint di destinazione, aggiorna l'endpoint di destinazione in modo che abbia il nome host corretto corrispondente al nome di dominio completo nel certificato del server di backend.
  2. Salva le modifiche apportate al proxy API.

    Nell'esempio descritto sopra, se il nome host del server di backend è stato specificato in modo errato, puoi correggerlo utilizzando il nome di dominio completo del certificato del server di backend, ovvero backend.apigee.net, come segue:

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

Causa: catena di certificati o certificato errato o incompleta presentato dal server di backend

Diagnostica

  1. Ottieni la catena di certificati del server di backend eseguendo il comando openssl sul nome host del server di backend, come indicato di seguito:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Prendi nota del Certificate chain nell'output del comando riportato sopra.

    Catena di certificati del server di backend di esempio dall'output del comando Opensl:

    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. Verifica di disporre della catena di certificati corretta e completa, come spiegato nella sezione Convalida della catena di certificati.
  3. Se non disponi di una catena di certificati valida e completa per il server di backend, questa è la causa del problema.

    Nella catena di certificati del server di backend di esempio mostrata sopra, il certificato radice manca. Di conseguenza, viene visualizzato questo errore.

Risoluzione

Aggiorna l'archivio chiavi del server di backend con una catena di certificati valida e completa:

  1. Verifica di avere una catena di certificati valida e completa del server di backend.

  2. Aggiorna la catena di certificati valida e completa nell'archivio chiavi del server di backend.

Se il problema persiste, vai a È necessario raccogliere i dati diagnostici.

Devi raccogliere dati diagnostici

Se il problema persiste anche dopo aver seguito le istruzioni riportate sopra, raccogli le seguenti informazioni diagnostiche e contatta l'assistenza Apigee Edge:

  • Se sei un utente del cloud pubblico, fornisci le seguenti informazioni:
    • Nome dell'organizzazione.
    • Nome ambiente
    • Nome proxy API
    • Completa il comando curl per riprodurre l'errore
    • File di traccia che mostra l'errore
    • Output del comando openssl:

      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#

    • Pacchetti TCP/IP acquisiti sul server di backend
  • Se sei un utente Private Cloud, fornisci le seguenti informazioni:

Riferimenti