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 Apigee hybrid non vanno a buon fine a causa di errori di connessione TLS. In genere, questi errori sono le reimpostazioni della connessione e gli errori di handshake degli avvisi.

Messaggi di errore

Le chiamate API non vanno a buon fine con TLS, simile all'errore mostrato di seguito o ad 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 Il secret di Kubernetes per org-envgroup non è presente nello spazio dei nomi di Apigee. Apigee hybrid
Formato del certificato SSL non corretto Il certificato SSL a cui punta la sezione virtualhosts del file di override è formattato in modo errato. Apigee hybrid
Le chiavi SSL non corrispondono al certificato SSL Le chiavi SSL non corrispondono al certificato SSL puntato nella sezione virtualhosts del file di override. Apigee hybrid

Causa: secret di Kubernetes 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
    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 secret di Kubernetes per il gruppo di ambienti dell'organizzazione ibrida Apigee sopra menzionato.
  2. Verifica che i secret di Kubernetes siano effettivamente mancanti utilizzando il comando seguente:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
    <no output>
    Questo esempio non mostra secret di Kubernetes per MY_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 delle chiavi presenti nel file overrides.yaml:

  1. Esegui questo comando per ricreare i secret mancanti:
    apigeectl apply -f overrides/overrides.yaml --settings virtualhosts

    L'output del comando precedente dovrebbe mostrare che il secret è stato creato:

    secret/MY_HYBRID_PROJECT-ENV_GROUP created

  2. Verifica che i secret di Kubernetes siano stati creati correttamente utilizzando il comando seguente:
    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 Raccogliere 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 di certificato/chiave come descritto in Opzione 1: coppia 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 di 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 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 di certificato.

Se l'output mostra il certificato anziché un errore, considera la 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 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 output di esempio (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 di Kubernetes come descritto in Opzione 2: secret di 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 output di esempio (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 la sezione Risoluzione.

Risoluzione

Assicurati di fornire le chiavi private corrette e i certificati SSL corrispondenti. Risolvi eventuali problemi relativi a chiave privata e 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 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 vedi gli errori e condividilo rimuovendo eventuali informazioni sensibili e indirizzi IP.
  3. Dopo aver consultato il tuo team di rete, dopo aver consultato il tuo team di rete per la condivisione con l'assistenza Apigee, tieni a portata di mano l'intera topologia di rete e il flusso di rete.