API-Aufrufe schlagen mit TLS-Fehlern fehl

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

Symptom

Apigee Hybrid API-Anfragen schlagen mit TLS-Verbindungsfehlern fehl. Diese Fehler werden in der Regel durch Zurücksetzen der Verbindung und durch Fehler bei Benachrichtigungen beim Handshake verursacht.

Fehlermeldungen

API-Aufrufe schlagen mit TLS wie dem unten gezeigten Fehler oder anderen, aber nicht identischen Fehlern fehl:

* 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

Mögliche Ursachen

Ursache Beschreibung Anleitungen zur Fehlerbehebung gelten für
Fehlendes Ingress-Kubernetes-Secret Das Kubernetes-Secret für org-envgroup fehlt im Apigee-Namespace. Apigee hybrid
Falsch formatiertes SSL-Zertifikat Das SSL-Zertifikat, das im Abschnitt „Virtualhosts“ der Überschreibungsdatei verweist, ist falsch formatiert. Apigee hybrid
Die SSL-Schlüssel stimmen nicht mit dem SSL-Zertifikat überein Die SSL-Schlüssel stimmen nicht mit dem SSL-Zertifikat überein, auf das im Abschnitt „Virtualhosts“ der Überschreibungsdatei verwiesen wird. Apigee hybrid

Ursache: Fehlendes Ingress-Kubernetes-Secret

Diagnose

  1. Analysieren Sie die Logs von apigee-watcher-Pods im Apigee-Namespace und prüfen Sie, ob Fehler vorliegen.

    Möglicherweise tritt ein Fehler wie der folgende auf:
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    Dabei gilt:
    • MY_HYBRID_PROJECT ist der Name der Apigee Hybrid-Organisation.
    • ENV_GROUP ist der Name der Umgebungsgruppe.
    Der obige Fehler gibt an, dass apigee-watcher das Kubernetes-Secret für die oben erwähnte Umgebungsgruppe der Apigee Hybrid-Organisation nicht finden konnte.
  2. Prüfen Sie mit dem folgenden Befehl, ob die Kubernetes-Secrets tatsächlich fehlen:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
    <no output>
    In diesem Beispiel sind keine Kubernetes-Secrets für MY_HYBRID_PROJECT-ENV_GROUP zu sehen. Diese wurden möglicherweise irrtümlich gelöscht.

Lösung

Sie können die fehlenden Kubernetes-Secrets mithilfe der Informationen zu TLS-Zertifikaten und -Schlüsseldateien aus der Datei overrides.yaml neu erstellen:

  1. Führen Sie den folgenden Befehl aus, um die fehlenden Secrets neu zu erstellen:
    apigeectl apply -f overrides/overrides.yaml --settings virtualhosts

    Die Ausgabe des obigen Befehls sollte zeigen, dass das Secret erstellt wurde:

    secret/MY_HYBRID_PROJECT-ENV_GROUP created
  2. Prüfen Sie mit dem folgenden Befehl, ob die Kubernetes-Secrets erfolgreich erstellt wurden:
    kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP

    Die Ausgabe dieses Befehls sollte so aussehen:

    MY_HYBRID_PROJECT-ENV_GROUP                   Opaque                2      7s

Wenn das Problem weiterhin besteht, lesen Sie unten den Abschnitt Erfassen von Diagnoseinformationen erforderlich.

Ursache: Falsch formatiertes SSL-Zertifikat

Diagnose

Prüfen Sie zuerst, ob die Zertifikatsdatei eine PEM-Datei ist. So prüfen Sie, ob das korrekt formatierte SSL-Zertifikat in apigee-ingressgateway geladen wurde:

Wenn Sie das One-Way-TLS mit einem Zertifikat/Schlüsselpaar konfiguriert haben, wie unter Option 1: Schlüssel/Zertifikat-Paar beschrieben, Folgendes ausführen:

openssl x509 -in $CERT_FILE -text -noout

Beispielausgabe (ohne Fehler):

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

Wenn Sie das One-Way-TLS mit einem Kubernetes-Secret konfiguriert haben, wie unter Option 2: Kubernetes-Secret beschrieben, Folgendes ausführen:

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

Beispielausgabe (ohne Fehler):

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

Wenn die Ausgabe des obigen Befehls so aussieht

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:

Bei Fehlern wie

error loading certificates
8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line

Weitere Informationen finden Sie im Abschnitt Auflösung.

Lösung

Die Fehler können je nach Formatfehler in der Zertifikatsdatei variieren. Beheben Sie den Zertifikatsfehler bei Bedarf.

Wenn die Ausgabe das Zertifikat anstelle eines Fehlers anzeigt, prüfen Sie die Ursache: Die SSL-Schlüssel stimmen nicht mit dem SSL-Zertifikat überein.

Ursache: Die SSL-Schlüssel stimmen nicht mit dem SSL-Zertifikat überein

Diagnose

Wenn Sie das One-Way-TLS mit einem Zertifikat/Schlüsselpaar konfiguriert haben, wie unter Option 1: Schlüssel/Zertifikat-Paar beschrieben, führen Sie Folgendes aus:

diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)

Beispielausgabe (ohne Fehler):

diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem)
<No output>

Wenn Sie das One-Way-TLS mit Kubernetes-Secret konfiguriert haben, wie unter Option 2: Kubernetes-Secret beschrieben, führen Sie Folgendes aus:

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)

Beispielausgabe (ohne Fehler):

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>

Wenn die Ausgabe des Befehls einen Fehler wie den folgenden enthält:

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

dann stimmen die SSL-Schlüssel nicht mit dem SSL-Zertifikat überein. Lesen Sie den Abschnitt Lösung.

Lösung

Achten Sie darauf, dass Sie die richtigen privaten Schlüssel und die zugehörigen SSL-Zertifikate angeben. Beheben Sie alle Probleme mit privaten Schlüsseln und SSL-Zertifikaten.

Wenn keine Ausgabe des Befehls angezeigt wird, stimmen das SSL-Zertifikat und der SSL-Schlüssel überein.

Erfassen von Diagnoseinformationen erforderlich

Wenn das Problem auch nach Befolgen der Anleitung auf dieser Seite weiterhin besteht, erfassen Sie die folgenden Diagnoseinformationen und senden Sie sie an den Apigee-Support:

  1. Die gesamte ausführliche curl-Ausgabe, in der der Fehler angezeigt wird.
  2. Erfassen Sie auf dem Computer, auf dem die Fehler auftreten, tcpdump und senden Sie diese an uns. Entfernen Sie dabei alle vertraulichen Informationen und IP-Adressen.
  3. Bereiten Sie die gesamte Netzwerktopologie und den Netzwerkfluss vor, nachdem Sie sich mit Ihrem Netzwerkteam beraten haben, und geben Sie sie an den Apigee-Support weiter.