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 ähnlich dem unten gezeigten Fehler fehl, oder andere, aber nicht identische Fehler:
* 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, auf das im Abschnitt "virtualhosts" der Überschreibungsdatei verwiesen wird, 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 Kubernetes-Secret für Ingress
Diagnose
- Analysieren Sie die Logs von
apigee-watcher
-Pods im Apigee-Namespace und prüfen Sie, ob Fehler vorliegen.
Möglicherweise wird ein Fehler wie der folgende angezeigt:
NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
Wobei:MY_HYBRID_PROJECT
ist der Name der Apigee Hybrid-Organisation.ENV_GROUP
ist der Name der Umgebungsgruppe.
apigee-watcher
das Kubernetes-Secret für die oben erwähnte Umgebungsgruppe der Apigee Hybrid-Organisation nicht finden konnte. - 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 werden keine Kubernetes-Secrets fürMY_HYBRID_PROJECT-ENV_GROUP
angezeigt. Diese könnten fälschlicherweise gelöscht worden sein.
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:
- 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
- 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 wie folgt 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. Mit den im Folgenden aufgeführten Schritten können Sie prüfen, 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 eine 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 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 Lösung.
Lösung
Die Fehler können je nach Formatfehler in der Zertifikatsdatei unterschiedlich sein. Beheben Sie gegebenenfalls den Zertifikatsfehler.
Wenn die Ausgabe anstelle eines Fehlers das Zertifikat anzeigt, berücksichtigen 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 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 eine 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 obigen Befehls einen Fehler wie den folgenden anzeigt:
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
stimmen die SSL-Schlüssel nicht mit dem SSL-Zertifikat überein und lesen Sie den Abschnitt Lösung.
Lösung
Stellen Sie sicher, dass Sie die richtigen privaten Schlüssel und die entsprechenden SSL-Zertifikate angeben. Beheben Sie alle Probleme mit privaten Schlüsseln und SSL-Zertifikaten.
Wenn Sie keine Ausgabe des Befehls sehen, stimmen das SSL-Zertifikat und der SSL-Schlüssel überein.
Erfassen von Diagnoseinformationen erforderlich
Wenn das Problem nach Befolgen der Anleitung auf dieser Seite weiterhin besteht, sammeln Sie die folgenden Diagnoseinformationen und senden Sie sie an den Apigee-Support:
- Die gesamte ausführliche Ausgabe von
curl
, in der der Fehler angezeigt wird. - Erfassen Sie eine
tcpdump
auf dem Computer, auf dem die Fehler angezeigt werden, und geben Sie diese frei. Entfernen Sie dazu alle vertraulichen Informationen und IP-Adressen. - Halten Sie die gesamte Netzwerktopologie und den Netzwerkfluss bereit, nachdem Sie sich mit Ihrem Netzwerkteam in Verbindung gesetzt haben, um sie mit dem Apigee-Support zu teilen.