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 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

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

    Potresti riscontrare 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 Apigee hybrid
    • ENV_GROUP è il nome del gruppo di ambienti
    L'errore precedente indica che apigee-watcher non è riuscito a trovare il secret Kubernetes per il gruppo di ambienti menzionato sopra dell'organizzazione Apigee ibrida.
  2. 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 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 di chiavi dal file overrides.yaml:

  1. 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 --atomic in 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
    
  2. 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 -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 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:

  1. L'intero output dettagliato di curl in cui viene visualizzato l'errore.
  2. Acquisisci un tcpdump sul computer su cui visualizzi gli errori e condividilo rimuovendo eventuali informazioni sensibili e indirizzi IP.
  3. Prepara l'intera topologia di rete e il flusso di rete dopo aver consultato il team di rete da condividere con l'assistenza Apigee.