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
- 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:
Dabei gilt:NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP" in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
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 sind keine Kubernetes-Secrets fürMY_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:
- 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 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:
- Die gesamte ausführliche
curl
-Ausgabe, in der der Fehler angezeigt wird. - 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. - 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.