Chiamate API che generano errori TLS

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
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 Ingress mancante In Apigee non è presente il secret Kubernetes per org-envgroup nello spazio dei nomi. Apigee hybrid
Certificato SSL formattato in modo errato Il certificato SSL che punta alla sezione virtualhosts del file di override è formato in modo errato. Apigee hybrid
Le chiavi SSL non corrispondono al certificato SSL Le chiavi SSL non corrispondono al certificato SSL che punta alla sezione virtualhosts del file di override. Apigee hybrid

Causa: secret Kubernetes di Ingress mancante

Diagnosi

  1. Analizza i log dei pod apigee-watcher nello spazio dei nomi apigee e controlla se sono presenti sono presenti errori.

    Potresti notare un errore simile al seguente:
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    dove:
    • MY_HYBRID_PROJECT è il nome dell'organizzazione ibrida Apigee
    • ENV_GROUP è il nome del gruppo di ambienti
    L'errore riportato sopra indica che apigee-watcher non è riuscito a trovare il segreto Kubernetes per il gruppo di ambienti sopra indicato dell'organizzazione ibrida Apigee.
  2. 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 per MY_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:

  1. 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
  2. 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 alla pagina Riunione obbligatoria Informazioni diagnostiche.

Causa: formato del certificato SSL non corretto

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 certificato/chiave come descritto in Opzione 1: coppia chiave/certificato, 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 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 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 certificati/chiavi come descritto in Opzione 1: coppia di chiavi/certificati, 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

le chiavi SSL non corrispondono al certificato SSL e consulta le Risoluzione.

Risoluzione

Assicurati di fornire le chiavi private corrette e le chiavi corrispondenti Certificati SSL. Risolvi eventuali problemi relativi alla chiave privata e al certificato SSL.

Se non viene visualizzato alcun output del comando, significa che il certificato SSL e la chiave SSL corrispondono.

È necessario raccogliere informazioni di diagnostica

Se il problema persiste anche dopo aver seguito le istruzioni in questa pagina, raccogli il le informazioni diagnostiche e le forniamo Assistenza Apigee:

  1. L'intero output dettagliato curl in cui viene visualizzato l'errore.
  2. Acquisisci un tcpdump sulla macchina su cui si verificano gli errori e condividilo rimuovendo eventuali informazioni sensibili e indirizzi IP.
  3. 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.