Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
Síntoma
Las solicitudes de API híbridas de Apigee fallan con errores de conexión TLS. Estos errores suelen ser restablecimientos de conexión y fallos de handshake de alerta.
Mensajes de error
Las llamadas a la API fallan con un error de TLS similar al que se muestra a continuación u otros errores que no son 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
Posibles motivos
Causa | Descripción | Instrucciones de solución de problemas aplicables a |
---|---|---|
Falta el secreto de Kubernetes de Ingress | Falta el secreto de Kubernetes de org-envgroup en el espacio de nombres de Apigee. |
Apigee Hybrid |
Certificado SSL con formato incorrecto | El certificado SSL al que se hace referencia en la sección virtualhosts del archivo de anulaciones tiene un formato incorrecto. | Apigee Hybrid |
Las claves SSL no coinciden con el certificado SSL | Las claves SSL no coinciden con el certificado SSL indicado en la sección virtualhosts del archivo de anulaciones. | Apigee Hybrid |
Causa: falta el secreto de Ingress de Kubernetes
Diagnóstico
- Analiza los registros de los pods de
apigee-watcher
en el espacio de nombres apigee y comprueba si hay algún error.
Puede que veas un error como el siguiente:
donde: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 Hybrid.ENV_GROUP
es el nombre del grupo de entornos
apigee-watcher
no ha encontrado el secreto de Kubernetes del grupo de entornos mencionado anteriormente de la organización híbrida de Apigee. - Para comprobar que faltan los secretos de Kubernetes, usa el siguiente comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
<no output>
En este ejemplo no se muestran secretos de Kubernetes paraMY_HYBRID_PROJECT-ENV_GROUP
. Es posible que se hayan eliminado por error.
Resolución
Puedes volver a crear los secretos de Kubernetes que faltan con la información de los certificados TLS y los archivos de claves del archivo overrides.yaml
:
- Ejecuta el siguiente comando para volver a crear los secretos que faltan con
Helm:
Prueba de funcionamiento:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE \ --dry-run=server
Asegúrate de incluir todos los ajustes que se muestran, incluido
--atomic
para que la acción se revierta si falla.Es posible que tu instalación se haya configurado con un ENV_GROUP_RELEASE_NAME diferente de ENV_GROUP. Para obtener información sobre los ajustes, consulta Instalar Apigee hybrid con Helm.
Instala el gráfico:
helm upgrade ENV_GROUP_RELEASE_NAME apigee-virtualhost/ \ --namespace APIGEE_NAMESPACE \ --atomic \ --set envgroup=ENV_GROUP \ -f OVERRIDES_FILE
- Verifica que los secretos de Kubernetes se hayan creado correctamente con el siguiente comando:
kubectl -n apigee get secrets | grep MY_HYBRID_PROJECT-ENV_GROUP
La salida de este comando debería mostrar lo siguiente:
MY_HYBRID_PROJECT-ENV_GROUP Opaque 2 7s
Si el problema persiste, ve a Información de diagnóstico necesaria.
Causa: certificado SSL con formato incorrecto
Diagnóstico
En primer lugar, asegúrate de que el archivo de certificado sea un archivo .PEM. Para comprobar si el certificado SSL con el formato correcto se ha cargado en apigee-ingressgateway
, siga estos pasos.
Si has configurado TLS unidireccional con un par de certificado y clave, tal como se describe en la
Opción 1: par de clave y certificado,
ejecuta el siguiente comando:
openssl x509 -in $CERT_FILE -text -noout
Ejemplo de salida (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 has configurado TLS unidireccional mediante un secreto de Kubernetes, tal como se describe en la opción 2: Secreto 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
Ejemplo de salida (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 la salida del comando anterior tiene este aspecto:
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:
En caso de errores como
error loading certificates 8360934016:error:09FFF066:PEM routines:CRYPTO_internal:bad end line
Consulta la sección Resolución.
Resolución
Los errores pueden variar en función del error de formato del archivo de certificado. Si es necesario, corrige el error del certificado.
Si el resultado muestra el certificado en lugar de un error, ten en cuenta lo siguiente: Causa: las claves SSL no coinciden con el certificado SSL.
Causa: Las claves SSL no coinciden con el certificado SSL
Diagnóstico
Si has configurado TLS unidireccional con un par de certificado y clave, tal como se describe en la opción 1: par de clave y certificado, ejecuta el siguiente comando:
diff -q <(openssl rsa -noout -modulus -in $KEY_FILE ) <(openssl x509 -noout -modulus -in $CERT_FILE)
Ejemplo de salida (sin errores):
diff -q <(openssl rsa -noout -modulus -in my_server.key ) <(openssl x509 -noout -modulus -in my_server.pem) <No output>
Si has configurado TLS unidireccional mediante un secreto de Kubernetes, tal como se describe en la opción 2: secreto 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)
Ejemplo de salida (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. Consulta la sección Resolución.
Resolución
Asegúrate de proporcionar las claves privadas correctas y sus certificados SSL correspondientes. Soluciona los problemas que haya con la clave privada y el certificado SSL.
Si no ves ningún resultado del comando, significa que el certificado SSL y la clave SSL coinciden.
Must Gather Diagnostic Information
Si el problema persiste después de seguir las instrucciones de esta página, recoge la siguiente información de diagnóstico y proporciónasela al equipo de Asistencia de Apigee:
- Toda la
curl
salida detallada en la que se muestra el error. - Captura un
tcpdump
en la máquina en la que se producen los errores y compártelo después de eliminar cualquier información sensible y dirección IP. - Tener lista toda la topología y el flujo de la red después de consultar con tu equipo de redes para compartirla con el equipo de Asistencia de Apigee.