Chiamate API che generano errori TLS

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza Documentazione di Apigee Edge.

Sintomo

Le richieste API ibride Apigee non vanno a buon fine con TLS errori di connessione. Questi errori di solito riguardano la reimpostazione della connessione e gli errori di handshake degli avvisi.

Messaggi di errore

Le chiamate API hanno esito negativo con TLS simile all'errore mostrato di seguito oppure 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 Le istruzioni di 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: manca il secret Kubernetes Ingress

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 secret Kubernetes per dell'organizzazione ibrida Apigee.
  2. Verifica che i secret di Kubernetes siano effettivamente mancanti utilizzando questo comando:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
    <no output>
    Questo esempio non mostra secret di Kubernetes MY_HYBRID_PROJECT-ENV_GROUP. Queste informazioni potrebbero essere state eliminate per errore.

Risoluzione

Puoi ricreare i secret Kubernetes mancanti utilizzando le informazioni relative ai certificati TLS e ai file delle chiavi dal 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 indicare 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 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 formato è corretto Il certificato SSL è stato caricato su apigee-ingressgateway. Segui questa procedura.

Se hai configurato il protocollo TLS unidirezionale utilizzando una coppia certificato/chiave come descritto in Opzione 1: coppia chiave/certificato, run:

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, run:

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 invece di 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 il protocollo TLS unidirezionale utilizzando la coppia certificato/chiave come descritto in Opzione 1: coppia chiave/certificato, run:

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 Kubernetes, come descritto in Opzione 2: secret di Kubernetes, run:

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

Raccogliere informazioni diagnostiche

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 sul computer su cui visualizzi gli errori e condividilo rimuovendo qualsiasi informazioni sensibili e indirizzo IP.
  3. Prepara l'intera topologia di rete e il flusso di rete dopo aver consultato la rete con il team di assistenza Apigee.