Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.
Síntoma
Las solicitudes a la API de Apigee hybrid fallan con errores de conexión TLS. Por lo general, estos errores son restablecimientos de conexión y fallas en el protocolo de enlace de alerta.
Mensajes de error
Las llamadas a la API fallan con TLS similar al error que se muestra a continuación, o bien otros errores, pero no idénticos:
* 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
Causas posibles
Causa | Descripción | Instrucciones de solución de problemas aplicables para |
---|---|---|
Falta el secreto de Kubernetes de Ingress | Falta el secreto de Kubernetes para org-envgroup en el espacio de nombres de Apigee. |
Apigee Hybrid |
Certificado SSL con formato incorrecto | El certificado SSL que apunta a la sección virtualhosts del archivo de anulación tiene un formato incorrecto. | Apigee Hybrid |
Las claves SSL no coinciden con el certificado SSL | Las claves SSL no coinciden con el certificado SSL que apunta a la sección virtualhosts del archivo de anulación. | Apigee Hybrid |
Causa: falta el secreto de Kubernetes de Ingress
Diagnóstico
- Analiza los registros de los Pods
apigee-watcher
en el espacio de nombres de Apigee y verifica si hay algún error.
Es posible que observes un error como el siguiente:
aquí: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
es el nombre de la organización de Apigee hybridENV_GROUP
es el nombre del grupo de entornos.
apigee-watcher
no pudo encontrar el secreto de Kubernetes para el grupo de entorno mencionado anteriormente de la organización de Apigee hybrid. - Usa el siguiente comando para verificar que los secretos de Kubernetes faltan de verdad:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
En este ejemplo, no se muestran objetos Secret de Kubernetes paraMY_HYBRID_PROJECT-ENV_GROUP
. Es posible que se hayan borrado por error.
Solución
Puedes volver a crear los secretos que faltan de Kubernetes con los certificados TLS y la información de los archivos de claves desde el archivo overrides.yaml
:
- Ejecuta el siguiente comando para volver a crear los secretos faltantes:
apigeectl apply -f overrides/overrides.yaml --settings virtualhosts
El resultado del comando anterior debería mostrar que se creó el secreto:
secret/MY_HYBRID_PROJECT-ENV_GROUP created
- Verifica que los secretos de Kubernetes se creen con éxito con el siguiente comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
El resultado de este comando debería mostrar lo siguiente:
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
Si el problema persiste, consulta Recopila información de diagnóstico a continuación.
Causa: Certificado SSL con un formato incorrecto
Diagnóstico
Primero, asegúrate de que el archivo de certificado sea un archivo .PEM. Para verificar si el certificado SSL con el formato correcto se cargó en apigee-ingressgateway
, sigue estos pasos.
Si configuraste TLS unidireccional con un par de claves/certificado, como se describe en la Opción 1: par de claves/certificado, ejecuta el siguiente comando:
openssl x509 -in $CERT_FILE -text -noout
Este es un resultado de ejemplo (sin errores):
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
Si configuraste TLS unidireccional con un Secret de Kubernetes como se describe en Opción 2: Secret de Kubernetes, ejecuta lo siguiente:
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
Este es un resultado de ejemplo (sin errores):
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
Si el resultado del comando anterior se ve de la siguiente manera:
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:
Para errores como
error loading certificates 8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line
consulta la sección Resolución.
Solución
Los errores pueden variar según el error de formato en el archivo del certificado. Corrige el error del certificado si es necesario.
Si el resultado muestra el certificado en lugar de un error, considera Causa: Las claves SSL no coinciden con el certificado SSL.
Causa: Las claves SSL no coinciden con el certificado SSL
Diagnóstico
Si configuraste TLS unidireccional con par de claves/certificado como se describe en la Opción 1: par de claves/certificado, ejecuta lo siguiente:
diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)
Este es un resultado de ejemplo (sin errores):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem)
<No output>
Si configuraste TLS unidireccional con el Secret de Kubernetes como se describe en la Opción 2: Secret de Kubernetes, ejecuta lo siguiente:
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)
Este es un resultado de ejemplo (sin errores):
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>
Si el resultado del comando anterior muestra un error como el siguiente:
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
entonces las claves SSL no coinciden con el certificado SSL y consulta la sección Resolución.
Solución
Asegúrate de proporcionar las claves privadas correctas y los certificados SSL correspondientes. Soluciona cualquier problema con la clave privada y el certificado SSL.
Si no ves ningún resultado del comando, el certificado SSL y la clave SSL coinciden.
Se debe recopilar información de diagnóstico
Si el problema persiste después de seguir las instrucciones de esta página, recopila la siguiente información de diagnóstico y proporciónala a Asistencia de Apigee:
- El resultado detallado
curl
completo en el que ves el error. - Captura un
tcpdump
en la máquina en la que ves los errores y compártelo. Para ello, quita la información sensible y las direcciones IP. - Ten listos toda la topología de red y el flujo de red después de consultar con tu equipo de red para compartirlos con la asistencia de Apigee.