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:
- Accedi alla UI di Apigee Edge come utente con un ruolo appropriato.
Passa all'organizzazione in cui vuoi esaminare il problema.
- Vai alla pagina Analizza > Monitoraggio API > Esamina.
- Seleziona il periodo di tempo specifico in cui hai riscontrato gli errori.
Traccia Codice di errore su Ora.
Seleziona una cella con il codice di errore
messaging.adaptors.http.flow.SslHandshakeFailed
come mostrato di seguito:Le informazioni sul codice di errore
messaging.adaptors.http.flow.SslHandshakeFailed
vengono visualizzate come mostrato di seguito:Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.
- 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:
- Abilita la sessione di traccia e
- Attendi che si verifichi l'errore
503 Service Unavailable
con il codice di erroremessaging.adaptors.http.flow.SslHandshakeFailed
oppure - Se riesci a riprodurre il problema, esegui la chiamata API per riprodurlo
503 Service Unavailable
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le FlowInfos sia abilitata:
- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Naviga tra le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, l'errore viene visualizzato dopo la fase Inizio del flusso di richiesta target, come mostrato di seguito:
- 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.
- errore:
- Vai alla fase AX (Analytics Data Recorded) della traccia e fai clic.
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:
- Prendi nota dei valori di X-Apigee-fault-code, X-Apigee-fault-source e X-Apigee-Message-ID:
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:
- Se sei un utente Private Cloud, puoi utilizzare i log degli accessi di NGINX per determinare le informazioni chiave su HTTP
503 Service Unavailable
. Controlla i log degli accessi di NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log
- Cerca per vedere se si sono verificati errori
503
con il codice di erroremessaging.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 con503
. Se riscontri errori
503
con X-Apigee-fault-code corrispondente al valore dimessaging.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
- 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.
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 problemL'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
- 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.
- Se il codice di errore è
messaging.adaptors.http.flow.SslHandshakeFailed
, determina il messaggio di errore utilizzando uno dei seguenti metodi: - Trova error.cause utilizzando lo strumento Trace, come spiegato nella sezione Procedure comuni di diagnosi.
- Trova l'eccezione utilizzando i log del processore di messaggi, come spiegato nella sezione Passaggi comuni di diagnostica
- Trova
faultstring
nella risposta di errore alla chiamata API, come mostrato in Messaggio di errore - 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:
- Fase 1: determinazione della catena di certificati del server di backend
- 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
- Se sei un utente del cloud pubblico, acquisisci i pacchetti TCP/IP sul server di backend.
- 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.
Utilizza il seguente comando tcpdump per acquisire i pacchetti TCP/IP:
tcpdump -i any -s 0 host IP_ADDRESS -w FILE_NAME
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 daRST, 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
- 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 conCN= GTS CA 1D4
e da un certificato radice conCN = 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.
- Pacchetto 43: il processore di messaggi (origine) ha inviato un
messaggio
Fase 2
Fase 2: confronta il certificato e i certificati del server di backend archiviati nel truststore del processore di messaggi
- Determina la catena di certificati del server di backend.
- Per determinare il certificato archiviato nel truststore del processore di messaggi:
Recupera il nome di riferimento dell'archivio attendibilità dall'elemento
TrustStore
nella sezioneSSLInfo
diTargetEndpoint
.Diamo un'occhiata a una sezione
SSLInfo
di esempio in una configurazioneTargetEndpoint
:<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>
- Nell'esempio precedente, il nome di riferimento
TrustStore
èmyCompanyTruststoreRef
. 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à.
Nell'esempio precedente, il nome dell'archivio attendibilità è:
myCompanyTruststoreRef:
myCompanyTruststore
Recupera i certificati archiviati nell'archivio attendibilità (determinato nel passaggio precedente) utilizzando le seguenti API:
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" ]
-
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",
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:
- 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.
- 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.
- 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.
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 erroremessaging.adaptors.http.flow.SslHandshakeFailed
alle applicazioni client.
- Certificato Fogliolina:
Risoluzione
- Assicurati di avere la catena di certificati corretta e completa del server di backend.
- 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.
- 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
- 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
. 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 R1Nell'esempio precedente, il nome di dominio completo del server di backend è
backend.apigee.net
.- 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.
- 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:
- 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.
Conferma di avere una catena di certificati valida e completa del server di backend.
- 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:
- 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.
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
- 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 - Verifica di disporre della catena di certificati corretta e completa, come spiegato nella sezione Convalida della catena di certificati.
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:
Verifica di avere una catena di certificati valida e completa del server di backend.
- 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:
- Rilevato messaggio di errore completo
- Bundle di 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 di Ottieni tutti i certificati per un'API di archivio chiavi o truststore e anche i dettagli di ciascun certificato ottenuto mediante l'API Ottieni dettagli certificati da un archivio chiavi o un archivio attendibilità.
Riferimenti
- Certificato Catena di attendibilità
- Comando OpenSSL