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-Fehlern wie dem unten gezeigten 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, um festzustellen, 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 mit Helm neu zu erstellen:

    Probelauf:

    helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    --set envgroup=ENV_GROUP \
    -f OVERRIDES_FILE \
    --dry-run=server
    

    Achten Sie darauf, alle angezeigten Einstellungen anzugeben, einschließlich --atomic, damit die Aktion bei einem Fehler rückgängig gemacht wird.

    Ihre Installation wurde möglicherweise mit einer ENV_GROUP_RELEASE_NAME eingerichtet, die sich von ENV_GROUP unterscheidet. Informationen zu den Einstellungen finden Sie unter Apigee Hybrid mit Helm installieren.

    Installation des Diagramms:

    helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \
    --namespace APIGEE_NAMESPACE \
    --atomic \
    --set envgroup=ENV_GROUP \
    -f OVERRIDES_FILE
    
  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 Folgendes enthalten:

    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 es sich bei der Zertifikatsdatei um eine PEM-Datei handelt. 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, führen Sie Folgendes aus:

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 Befehls oben 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 Zertifikatdatei variieren. Beheben Sie den Zertifikatsfehler bei Bedarf.

Wenn in der Ausgabe das Zertifikat statt eines Fehlers angezeigt wird, liegt möglicherweise folgender Grund vor: 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

Die SSL-Schlüssel stimmen nicht mit dem SSL-Zertifikat überein. Weitere Informationen finden Sie im 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 Anweisungen auf dieser Seite weiterhin besteht, erfassen Sie die folgenden Diagnoseinformationen und senden Sie sie an den Apigee-Support:

  1. Die vollständige ausführliche Ausgabe von curl, 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.