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 con errori di connessione TLS. In genere si tratta di reimpostazione della connessione e errori di handshake di avviso.
Messaggi di errore
Le chiamate API non riescono con TLS in modo simile all'errore mostrato di seguito o con altri errori, ma 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 di Ingress mancante | Lo spazio dei nomi Apigee non contiene il secret Kubernetes per org-envgroup . |
Apigee hybrid |
Certificato SSL con formato errato | Il certificato SSL a cui si fa riferimento nella sezione virtualhosts del file delle sostituzioni è formato in modo errato. | Apigee hybrid |
Le chiavi SSL non corrispondono al certificato SSL | Le chiavi SSL non corrispondono al certificato SSL a cui si fa riferimento nella sezione virtualhosts del file delle sostituzioni. | Apigee hybrid |
Causa: secret Kubernetes di Ingress mancante
Diagnosi
- Analizza i log dei pod
apigee-watcher
nello spazio dei nomi apigee e controlla se sono presenti errori.
Potresti notare un errore come il seguente:
where: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-watcher
non è riuscito a trovare il segreto Kubernetes per il gruppo di ambienti sopra indicato dell'organizzazione ibrida Apigee. - Verifica che i secret di Kubernetes manchino effettivamente utilizzando il seguente 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 state eliminate 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 il seguente comando per ricreare i secret mancanti:
apigeectl apply -f overrides/overrides.yaml --settings virtualhosts
L'output del comando riportato sopra dovrebbe indicare che il segreto è stato creato:
secret/MY_HYBRID_PROJECT-ENV_GROUP created
- Verifica che i secret di Kubernetes siano stati creati correttamente utilizzando il seguente 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 Informazioni di diagnostica obbligatorie.
Causa: formato del certificato SSL 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 chiavi/certificati come descritto in Opzione 1: coppia di chiavi/certificati,
esegui:
openssl x509 -in $CERT_FILE -text -noout
Un esempio di output (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 -text
Un esempio di output (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 al seguente
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 possono variare a seconda dell'errore di formato nel file del certificato. Correggi l'errore del certificato, se necessario.
Se l'output mostra il certificato anziché un errore, considera la seguente 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 di chiavi/certificato come descritto in Opzione 1: coppia di chiavi/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 simile al seguente:
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
significa che le chiavi SSL non corrispondono al certificato SSL. Consulta la sezione Risoluzione.
Risoluzione
Assicurati di fornire le chiavi private corrette e i relativi certificati SSL. Risolvi eventuali problemi relativi alla chiave privata e al certificato SSL.
Se non viene visualizzato alcun output del comando, il certificato SSL e la chiave SSL corrispondono.
È necessario raccogliere informazioni di diagnostica
Se il problema persiste dopo aver seguito le istruzioni riportate in questa pagina, raccogli le seguenti informazioni di diagnostica e forniscile all'assistenza Apigee:
- L'intero output dettagliato di
curl
in cui viene visualizzato l'errore. - Acquisisci un
tcpdump
sulla macchina su cui si verificano gli errori e condividilo rimuovendo le informazioni sensibili e gli indirizzi IP. - Dopo aver consultato il team di rete, tieni pronta l'intera topologia di rete e il flusso di rete da condividere con l'assistenza Apigee.