Servizio 503 non disponibile - Errore di handshake SSL

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

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 diversi motivi. Il messaggio di errore in faultstring indica in genere una possibile causa di alto livello che ha portato a 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 visualizzi 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 l'archivio attendibile 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 errati/incompleti nel truststore del processore di messaggi Il certificato e/o la relativa catena memorizzati nell'archivio attendibile del processore di messaggi di Apigee Edge non corrispondono alla catena di certificati del server di backend o non la contengono per intero. Utenti di Edge Private e Public Cloud
Mancata corrispondenza del nome di dominio completo nel certificato del server di backend e del nome host nell'endpoint di destinazione Il certificato presentato dal server di backend contiene un nome di dominio completo che non corrisponde al nome host specificato nell'endpoint di destinazione. Utenti di Edge Private e Public Cloud
Certificato o catena di certificati errati/incompleti presentati dal server di backend La catena di certificati presentata dal server di backend è errata o incompleta. Utenti di Edge Private e Public Cloud

Passaggi di diagnostica 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 API Monitoring:

  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 osservato gli errori.
  5. Traccia il codice di errore rispetto al tempo.

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

    ( visualizza immagine più grande)

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

    ( visualizza immagine più grande)

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

    ( visualizza immagine più grande)

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

Traccia

Procedura n. 2: utilizzo dello strumento Trace

Per diagnosticare l'errore utilizzando lo strumento Trace:

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

  3. Seleziona una delle richieste non riuscite ed esamina la traccia.
  4. Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
  5. In genere, l'errore si verifica dopo la fase Target Request Flow Started come mostrato di seguito:

    ( visualizza immagine più grande)

  6. Prendi nota dei valori seguenti 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, in quanto il processore di messaggi di Apigee Edge non è riuscito a convalidare il certificato del server di backend.
  7. Vai alla fase AX (dati di Analytics registrati) nella traccia e fai clic.
  8. Scorri verso il basso fino alla sezione Intestazioni di errore dei dettagli della fase e determina i valori di X-Apigee-fault-code e X-Apigee-fault-source e X-Apigee-Message-ID come mostrato di seguito:

    ( visualizza immagine più grande)

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

NGINX

Procedura n. 3: utilizzo dei log di accesso NGINX

Per diagnosticare l'errore utilizzando i log di accesso NGINX:

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

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

  3. Cerca eventuali errori 503 con codice di errore messaging.adaptors.http.flow.SslHandshakeFailed durante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono ancora presenti richieste non riuscite con 503.
  4. Se trovi 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 di accesso NGINX:

    ( visualizza immagine più grande)

    La voce di esempio riportata sopra del log di accesso 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 n. 4: utilizzo dei log del processore di messaggi

  1. Determina l'ID messaggio di una delle richieste non riuscite utilizzando API Monitoring, lo strumento Trace o i log di accesso NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Cerca l'ID messaggio di richiesta specifico nel log del processore di messaggi (/opt/apigee/var/log/edge-message-processor/logs/system.log). Potresti riscontrare 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 l'analisi dello stack dettagliata, 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

    Ciò 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: certificato o catena di certificati errati/incompleti nel truststore di Message Processor

Diagnosi

  1. Determina il codice di errore e l'origine dell'errore osservato utilizzando il monitoraggio API, lo strumento Trace o i log di accesso NGINX, come spiegato in Passaggi comuni per la diagnosi.
  2. Se il codice di errore è messaging.adaptors.http.flow.SslHandshakeFailed, allora 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:determina la catena di certificati del server di backend
  2. Fase 2: confronta la catena di certificati memorizzata nel truststore del processore di messaggi

Fase 1

Fase 1: determina la 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 dall'output del comando precedente:

Catena di certificati del server di backend di esempio dall'output comando 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. Se sei un utente del cloud pubblico, acquisisci i pacchetti TCP/IP sul server di backend.
  2. Se sei un utente di Private Cloud, puoi acquisire i pacchetti TCP/IP sul server di backend o sul processore di messaggi. Preferibilmente, acquisiscili sul server di backend, poiché 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 utilizzando lo strumento Wireshark o uno strumento simile che conosci.

    Analisi di esempio di Tcpdump

    ( visualizza immagine più grande)

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

      Ciò indica che la convalida del certificato del server di backend da parte del processore di messaggi non è riuscita. Il problema è dovuto al fatto che il processore di messaggi non dispone di alcun certificato che corrisponda a quello del server di backend o non riesce ad approvare il certificato del server di backend con i certificati disponibili nel proprio archivio attendibilità (del processore di messaggi).

    • Puoi tornare indietro e rivedere il pacchetto n. 45 e determinare la catena di certificati inviata dal server di backend.

      ( visualizza immagine più grande)

    • 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 un certificato radice con CN = GTX Root R1.

    Se hai verificato che la convalida del certificato del server non è riuscita, vai alla Fase 2: confronta il certificato del server di backend e i certificati archiviati nel truststore del processore di messaggi.

Fase 2

Fase 2: confronta il certificato del server di backend e i certificati memorizzati nell'archivio attendibile del processore di messaggi

  1. Determina la catena di certificati del server di backend.
  2. Determina il certificato archiviato nel truststore del processore di messaggi utilizzando i seguenti passaggi:
    1. Recupera il nome di riferimento del truststore dall'elemento TrustStore nella sezione SSLInfo del file 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 al truststore. Questo sarà il nome del truststore.

      ( visualizza immagine più grande)

    4. Nell'esempio precedente, il nome del truststore è:

      myCompanyTruststoreRef: myCompanyTruststore

  3. Recupera i certificati archiviati nel truststore (determinato nel passaggio precedente) utilizzando le seguenti API:

    1. Recupera tutti i certificati per un archivio chiavi o un archivio attendibile. Questa API elenca tutti i certificati nell'archivio attendibile 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 è impostato sul tuo token di accesso OAuth 2.0 come descritto in Ottieni un token di accesso OAuth 2.0
      • Le opzioni curl utilizzate in questo esempio sono descritte in Utilizzare curl

      Esempio di output:

      I certificati dell'archivio attendibile di esempio myCompanyTruststore sono:

      [
        "serverCert"
      ]
    2. Recupera i dettagli del certificato specifico da un keystore o un truststore. Questa API restituisce le informazioni su un certificato specifico nell'archivio attendibile 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 è impostato sul tuo token di accesso OAuth 2.0 come descritto in Ottieni un token di accesso OAuth 2.0
      • Le opzioni curl utilizzate in questo esempio sono descritte in Utilizzare curl

      Output di esempio

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

      Certificato foglia/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 memorizzato nell'archivio attendibile ottenuto nel passaggio 3 corrispondano. Se non corrispondono, questa è la causa del problema.

    Dall'esempio mostrato sopra, esaminiamo un certificato alla volta:

    1. Certificato end-entity:

      Dal server di backend:

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

      Dal truststore del processore di messaggi (client):

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

      Il certificato foglia memorizzato nel truststore 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 del processore di messaggi (client):

      "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 memorizzato 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 non è presente nell'archivio attendibilità di Message Processor.

    4. Poiché il certificato radice non è presente 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 riportate in Aggiorna un certificato TLS per il cloud per aggiornare il certificato all'archivio attendibilità del processore di messaggi di Apigee Edge.
  3. Se sei un utente di Private Cloud, segui le istruzioni riportate in Aggiorna un certificato TLS per Private Cloud per aggiornare il certificato all'archivio attendibile del processore di messaggi di Apigee Edge.

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

Se il server di backend presenta una catena di certificati contenente il nome di dominio completo che non corrisponde al nome host specificato nell'endpoint di destinazione, Message Processor 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.

Diagnosi

  1. Esamina l'endpoint di destinazione specifico nel proxy API in cui osservi questo errore e annota il 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 l'FQDN 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 annota il nome di dominio completo specificato come parte del nome comune 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, l'FQDN 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, questo è il motivo dell'errore.
  4. Nell'esempio discusso in precedenza, il nome host nell'endpoint di destinazione è backend.company.com. Tuttavia, il nome FQDN nel certificato del server di backend è backend.apigee.net. Poiché non corrispondono, ricevi questo errore.

Risoluzione

Puoi risolvere il problema utilizzando uno dei seguenti metodi:

FQDN corretto

Aggiorna il keystore del server di backend con il nome di dominio completo corretto, la catena di certificati valida e completa:

  1. Se non disponi di un certificato del server di backend con il nome di dominio completo (FQDN) corretto, procurati il certificato appropriato da un'autorità di certificazione (CA) idonea.
  2. Verifica di disporre di una catena di certificati del server di backend valida e completa.

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

Correggi il server di backend

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 che corrisponda all'FQDN nel certificato del server di backend.
  2. Salva le modifiche al proxy API.

    Nell'esempio discusso in precedenza, se il nome host del server di backend è stato specificato in modo errato, puoi correggerlo utilizzando l'FQDN 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: certificato o catena di certificati errati/incompleti presentati dal server di backend

Diagnosi

  1. Recupera la catena di certificati del server di backend eseguendo il comando openssl rispetto al nome host del server di backend come segue:
    openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    

    Prendi nota di Certificate chain dall'output del comando precedente.

    Catena di certificati del server di backend di esempio dall'output comando 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. Verifica di disporre della catena di certificati corretta e completa come spiegato in Convalida della catena di certificati.
  3. Se non disponi della catena di certificati valida e completa per il server di backend, allora questa è la causa del problema.

    Nella catena di certificati del server di backend di esempio mostrata sopra, manca il certificato radice. Pertanto, ricevi questo errore.

Risoluzione

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

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

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

Se il problema persiste, vai a Must gather diagnostic information.

Deve raccogliere informazioni diagnostiche

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 organizzazione
    • Nome ambiente
    • Nome del 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 di Private Cloud, fornisci le seguenti informazioni:
    • Messaggio di errore completo osservato
    • Bundle proxy API
    • File di traccia che mostra l'errore
    • Log del processore di messaggi /opt/apigee/var/log/edge-message-processor/logs/system.log
    • Output del comando openssl:
      openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
    • Pacchetti TCP/IP acquisiti sul server di backend o sul processore di messaggi.
    • Output dell'API Get all certificates for a keystore or truststore e anche i dettagli di ogni certificato ottenuto utilizzando l'API Get Cert Details from a Keystore or Truststore.

Riferimenti

  • Catena di attendibilità del certificato
  • Comando OpenSSL