Chiamate API che generano errori TLS

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

  1. 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:
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    where:
    • MY_HYBRID_PROJECT è il nome dell'organizzazione Apigee hybrid
    • 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 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:

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