Stai visualizzando la documentazione di Apigee e Apigee hybrid.
Visualizza la documentazione di
Apigee Edge.
Sintomo
Le richieste API ibride Apigee non vanno a buon fine a causa di errori di connessione TLS. Questi errori sono in genere reimpostazioni della connessione e errori di handshake di avviso.
Messaggi di errore
Le chiamate API non vanno a buon fine con errori TLS simili a quello mostrato di seguito o altri errori non identici:
* TLSv1.2 (OUT), TLS handshake, Client hello (1): * LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443 * Closing connection 0 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to example.apis.com:443
* (304) (OUT), TLS handshake, Client hello (1): * Recv failure: Connection reset by peer * LibreSSL/3.3.6: error:02FFF036:system library:func(4095):Connection reset by peer * Closing connection curl: (35) Recv failure: Connection reset by peer
* (304) (OUT), TLS handshake, Client hello (1): * LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure * Closing connection curl: (35) LibreSSL/3.3.6: error:1404B410:SSL routines:ST_CONNECT:sslv3 alert handshake failure
Cause possibili
| Causa | Descrizione | Istruzioni per la risoluzione dei problemi applicabili a |
|---|---|---|
| Secret Kubernetes Ingress mancante | Il secret Kubernetes per org-envgroup non è presente nello spazio dei nomi Apigee. |
Apigee hybrid |
| Certificato SSL formattato in modo errato | Il certificato SSL indicato nella sezione virtualhost del file di override non è formattato correttamente. | Apigee hybrid |
| Le chiavi SSL non corrispondono al certificato SSL | Le chiavi SSL non corrispondono al certificato SSL indicato nella sezione virtualhosts del file di override. | Apigee hybrid |
Causa: secret Kubernetes Ingress mancante
Diagnosi
- Analizza i log dei pod
apigee-watchernello spazio dei nomi apigee e verifica se sono presenti errori.
Potresti riscontrare un errore come il seguente:
dove:NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
MY_HYBRID_PROJECTè il nome dell'organizzazione Apigee hybridENV_GROUPè il nome del gruppo di ambienti
apigee-watchernon è riuscito a trovare il secret Kubernetes per il gruppo di ambienti menzionato sopra dell'organizzazione Apigee ibrida. - Verifica che i secret Kubernetes siano effettivamente mancanti utilizzando questo comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
Questo esempio non mostra segreti Kubernetes perMY_HYBRID_PROJECT-ENV_GROUP. Potrebbero essere stati eliminati per errore.
Risoluzione
Puoi ricreare i secret Kubernetes mancanti utilizzando le informazioni sui certificati TLS e sui file di chiavi
dal file overrides.yaml:
- Esegui questo comando per ricreare i secret mancanti utilizzando
Helm:
Prova:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE \ --dry-run=server
Assicurati di includere tutte le impostazioni mostrate, incluso
--atomicin modo che l'azione venga annullata in caso di errore.La tua installazione potrebbe essere stata configurata o meno utilizzando un ENV_GROUP_RELEASE_NAME diverso da ENV_GROUP. Per informazioni sulle impostazioni, vedi Installare Apigee Hybrid utilizzando Helm.
Installa il grafico:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE
- Verifica che i secret Kubernetes siano stati creati correttamente utilizzando questo comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
L'output di questo comando dovrebbe mostrare:
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
Se il problema persiste, vai a Must Gather Diagnostic Information.
Causa: certificato SSL formattato in modo errato
Diagnosi
Innanzitutto, assicurati che il file del certificato sia un file .PEM. Per verificare se il certificato SSL
formattato correttamente è caricato in apigee-ingressgateway, segui questi passaggi.
Se hai configurato TLS unidirezionale utilizzando una coppia di certificato/chiave come descritto in
Opzione 1: coppia di chiave/certificato,
esegui:
openssl x509 -in $CERT_FILE -text -noout
Un output di esempio (senza errori):
Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN Validity Not Before: Dec 18 09:40:23 2023 GMT Not After : May 1 09:40:23 2025 GMT Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: Trimmed Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption Trimmed
Se hai configurato TLS unidirezionale utilizzando un secret Kubernetes come descritto in Opzione 2: secret Kubernetes, esegui:
kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d > certfile ;
openssl x509 -in certfile -text -noout
kubectl -n apigee get secret <$SECRET_NAME> -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -textUn output di esempio (senza errori):
Certificate: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: C = US, O = xyz, OU = abc, CN = INTERIM-CN Validity Not Before: Dec 18 09:40:23 2023 GMT Not After : May 1 09:40:23 2025 GMT Subject: C = US, O = xyz, OU = abc, CN = shrey.example.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: Trimmed Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption Trimmed
Se l'output del comando precedente è simile a
unable to load certificate 136613728412992:error:0D078095:asn1 encoding routines:asn1_item_embed_d2i:sequence not constructed:../crypto/asn1/tasn_dec.c:321:Type=X509 136613728412992:error:0906700D:PEM routines:PEM_ASN1_read_bio:ASN1 lib:../crypto/pem/pem_oth.c:33:
Per errori come
error loading certificates 8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line
consulta la sezione Risoluzione.
Risoluzione
Gli errori potrebbero variare a seconda dell'errore di formato nel file del certificato. Se necessario, correggi l'errore del certificato.
Se l'output mostra il certificato anziché un errore, considera Causa: le chiavi SSL non corrispondono al certificato SSL.
Causa: le chiavi SSL non corrispondono al certificato SSL
Diagnosi
Se hai configurato TLS unidirezionale utilizzando la coppia certificato/chiave come descritto in Opzione 1: coppia chiave/certificato, esegui:
diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)
Un esempio di output (senza errori):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem) <No output>
Se hai configurato TLS unidirezionale utilizzando il secret Kubernetes come descritto in Opzione 2: secret Kubernetes, esegui:
diff -q <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets $SECRET_NAME -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)Un esempio di output (senza errori):
diff -q <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.key}'| base64 -d | openssl rsa -noout -modulus) <(kubectl -n apigee get secrets my-apigee-hybrid-env-grp -o jsonpath='{.data.cert}'| base64 -d | openssl x509 -noout -modulus)
<No output>Se l'output del comando precedente mostra un errore come:
unable to load Private Key 133504499987776:error:09091064:PEM routines:PEM_read_bio_ex:bad base64 decode:../crypto/pem/pem_lib.c:949: Files /dev/fd/63 and /dev/fd/62 differ
allora le chiavi SSL non corrispondono al certificato SSL e consulta la sezione Risoluzione.
Risoluzione
Assicurati di fornire le chiavi private corrette e i certificati SSL corrispondenti. Risolvi eventuali problemi relativi alla chiave privata e al certificato SSL.
Se non vedi alcun output del comando, il certificato SSL e la chiave SSL corrispondono.
Raccogliere informazioni diagnostiche
Se il problema persiste dopo aver seguito le istruzioni riportate in questa pagina, raccogli le seguenti informazioni diagnostiche e forniscile all'assistenza Apigee:
- L'intero output dettagliato di
curlin cui viene visualizzato l'errore. - Acquisisci un
tcpdumpsul computer su cui visualizzi gli errori e condividilo rimuovendo eventuali informazioni sensibili e indirizzi IP. - Prepara l'intera topologia di rete e il flusso di rete dopo aver consultato il team di rete da condividere con l'assistenza Apigee.