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:
- 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 osservato gli errori.
Traccia il codice di errore rispetto al tempo.
Seleziona una cella con il codice di errore
messaging.adaptors.http.flow.SslHandshakeFailedcome mostrato di seguito:( visualizza immagine più grande)

Le informazioni sul codice di errore
messaging.adaptors.http.flow.SslHandshakeFailedvengono visualizzate come mostrato di seguito:( visualizza immagine più grande)

Fai clic su Visualizza log ed espandi la riga della richiesta non riuscita.
( visualizza immagine più grande)
- 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:
- Attiva l'opzione Traccia sessione e
- Attendi che si verifichi l'errore
503 Service Unavailablecon codice di erroremessaging.adaptors.http.flow.SslHandshakeFailedoppure - Se riesci a riprodurre il problema, effettua la chiamata API per riprodurlo
503 Service Unavailable
- Attendi che si verifichi l'errore
Assicurati che l'opzione Mostra tutte le informazioni sul flusso sia abilitata:

- Seleziona una delle richieste non riuscite ed esamina la traccia.
- Esamina le diverse fasi della traccia e individua il punto in cui si è verificato l'errore.
In genere, l'errore si verifica dopo la fase Target Request Flow Started come mostrato di seguito:
( visualizza immagine più grande)

- 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 targetindica 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.
- Errore:
- Vai alla fase AX (dati di Analytics registrati) nella traccia e fai clic.
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)

- Prendi nota dei valori di X-Apigee-fault-code, X-Apigee-fault-source e X-Apigee-Message-ID:
| 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:
- Se sei un utente di Private Cloud, puoi utilizzare i log di accesso NGINX per determinare
le informazioni chiave su HTTP
503 Service Unavailable. Controlla i log di accesso di NGINX:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_log- Cerca eventuali errori
503con codice di erroremessaging.adaptors.http.flow.SslHandshakeFaileddurante un periodo di tempo specifico (se il problema si è verificato in passato) o se sono ancora presenti richieste non riuscite con503. Se trovi errori
503con 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 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.SslHandshakeFailedX-Apigee-fault-source target
Log del processore di messaggi
Procedura n. 4: utilizzo dei log del processore di messaggi
- 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.
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-1NIOThread@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 l'analisi dello stack dettagliata, come mostrato di seguito:
org:myorg env:test api:MyProxy rev:1
messageid:myorg-28247-3541813-1NIOThread@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 targetat 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 targetCiò 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
- 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.
- Se il codice di errore è
messaging.adaptors.http.flow.SslHandshakeFailed, allora determina il messaggio di errore utilizzando uno dei seguenti metodi: - Trova error.cause utilizzando lo strumento Trace come spiegato in Passaggi comuni per la diagnosi
- Trova l'eccezione utilizzando i log del processore di messaggi come spiegato in Passaggi comuni per la diagnosi
- Trova
faultstringdalla 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:determina la catena di certificati del server di backend
- 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
- Se sei un utente del cloud pubblico, acquisisci i pacchetti TCP/IP sul server di backend.
- 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.
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 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 Helloal server di backend (destinazione). - Pacchetto n. 44: il server di backend conferma la ricezione del
messaggio
Client Hellodal processore di messaggi. - Pacchetto n. 45: il server di backend invia il messaggio
Server Helloinsieme al certificato. - Pacchetto n. 46:il processore di messaggi riconosce la ricezione del messaggio
Server Helloe del certificato. Pacchetto n. 47:il processore di messaggi invia un messaggio
FIN, ACKseguito daRST, ACKnel 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 conCN= GTS CA 1D4e un certificato radice conCN = 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.
- Pacchetto n. 43: il processore di messaggi (origine) ha inviato un
messaggio
Fase 2
Fase 2: confronta il certificato del server di backend e i certificati memorizzati nell'archivio attendibile del processore di messaggi
- Determina la catena di certificati del server di backend.
- Determina il certificato archiviato nel truststore del processore di messaggi utilizzando
i seguenti passaggi:
Recupera il nome di riferimento del truststore dall'elemento
TrustStorenella sezioneSSLInfodel fileTargetEndpoint.Diamo un'occhiata a una sezione
SSLInfodi 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 al truststore. Questo sarà il nome del truststore.
( visualizza immagine più grande)
Nell'esempio precedente, il nome del truststore è:
myCompanyTruststoreRef:
myCompanyTruststore
Recupera i certificati archiviati nel truststore (determinato nel passaggio precedente) utilizzando le seguenti API:
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
curlutilizzate in questo esempio sono descritte in Utilizzare curl
Esempio di output:
I certificati dell'archivio attendibile di esempio
myCompanyTruststoresono:[ "serverCert" ]
-
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
curlutilizzate in questo esempio sono descritte in Utilizzare curl
Output di esempio
I dettagli di
serverCertmostrano 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",
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:
- 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.
- 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.
- 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.
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 Unavailablecon il codice di erroremessaging.adaptors.http.flow.SslHandshakeFailedalle applicazioni client.
- Certificato end-entity:
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 riportate in Aggiorna un certificato TLS per il cloud per aggiornare il certificato all'archivio attendibilità del processore di messaggi di Apigee Edge.
- 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
- 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. Determina l'FQDN nel certificato del server di backend utilizzando il comando
opensslcome 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 chaine annota il nome di dominio completo specificato come parte del nome comune nell'oggetto del certificato foglia.Certificate chain 0 s:/
CN=backend.apigee.neti:/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, l'FQDN 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, questo è il motivo dell'errore.
- 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:
- 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.
Verifica di disporre di una catena di certificati del server di backend valida e completa.
- 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:
- 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.
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
- Recupera la catena di certificati del server di backend eseguendo il comando
opensslrispetto al nome host del server di backend come segue:openssl s_client -connect BACKEND_SERVER_HOST_NAME:PORT_#
Prendi nota di
Certificate chaindall'output del comando precedente.Catena di certificati del server di backend di esempio dall'output comando openssl:
Certificate chain 0 s:/
CN=mocktarget.apigee.neti:/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 in Convalida della catena di certificati.
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:
Verifica di disporre di una catena di certificati del server di backend valida e completa.
- 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
curlper 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