Llamadas a API fallidas con errores de TLS

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

  1. 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:
    NOT_FOUND: failed to get secret "MY_HYBRID_PROJECT-ENV_GROUP"
    in namespace "apigee": secrets "MY_HYBRID_PROJECT-ENV_GROUP" not found
    donde:
    • MY_HYBRID_PROJECT es el nombre de la organización de Apigee Hybrid.
    • ENV_GROUP es el nombre del grupo de entornos
    El error anterior indica que apigee-watcher no ha encontrado el secreto de Kubernetes del grupo de entornos mencionado anteriormente de la organización híbrida de Apigee.
  2. 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 para MY_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:

  1. 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
    
  2. 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:

  1. Toda la curl salida detallada en la que se muestra el error.
  2. 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.
  3. 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.