Fallas del protocolo de enlace TLS/SSL

Estás consultando la documentación de Apigee Edge.
Consulta la documentación de Apigee X.
Información

Síntoma

Una falla del protocolo de enlace TLS/SSL se produce cuando un cliente y un servidor no pueden establecer comunicación mediante el protocolo TLS/SSL. Cuando se produce este error en Apigee Edge, la aplicación cliente recibe un estado HTTP 503 con el mensaje Servicio no disponible. Verás este error después de cualquier llamada a la API en la que se produzca una falla del protocolo de enlace TLS/SSL.

Mensajes de error

HTTP/1.1 503 Service Unavailable

También puedes ver este mensaje de error cuando se produce una falla del protocolo de enlace TLS/SSL:

Received fatal alert: handshake_failure

Causas posibles

TLS (seguridad de la capa de transporte, cuyo predecesor es SSL) es la tecnología de seguridad estándar para establecer un vínculo encriptado entre un servidor web y un cliente web, como un navegador o una app. Un protocolo de enlace es un proceso que permite que el cliente y el servidor TLS/SSL establezcan un conjunto de claves secretas con las que pueden comunicarse. Durante este proceso, el cliente y el servidor hacen lo siguiente:

  1. Acepta la versión del protocolo que usarás.
  2. Selecciona el algoritmo criptográfico que se usará.
  3. Intercambie y valida certificados digitales para autenticarse entre sí.

Si el protocolo de enlace TLS/SSL se realiza correctamente, el cliente y el servidor TLS/SSL se transfieren entre sí de forma segura. De lo contrario, si se produce una falla del protocolo de enlace TLS/SSL, la conexión finaliza y el cliente recibe un error 503 Service Unavailable.

Las posibles causas de las fallas del protocolo de enlace TLS/SSL son las siguientes:

Causa Descripción Quién puede realizar los pasos para solucionar problemas
Discrepancia en el protocolo El servidor no admite el protocolo que utiliza el cliente. Usuarios de la nube pública y privada
Discrepancia en el paquete de cifrado El servidor no admite el conjunto de algoritmos de cifrado que utiliza el cliente. Usuarios de la nube pública y privada
Certificado incorrecto El nombre de host de la URL que usa el cliente no coincide con el nombre de host del certificado almacenado en el extremo del servidor. Usuarios de la nube pública y privada
Una cadena de certificados incompleta o no válida se almacena en el extremo del cliente o del servidor. Usuarios de la nube pública y privada
El cliente envía un certificado incorrecto o vencido al servidor, o del servidor al cliente. Usuarios de la nube pública y privada
Servidor habilitado para SNI El servidor de backend tiene habilitada la indicación de nombre del servidor (SNI). Sin embargo, el cliente no puede comunicarse con los servidores de SNI. Solo usuarios de la nube privada

Discrepancias en el protocolo

Se produce una falla del protocolo de enlace TLS/SSL si el servidor no admite el protocolo que usa el cliente en la conexión entrante (en la parte norte) o saliente (en el sur). Consulta también Información sobre las conexiones con dirección norte y sur.

Diagnóstico

  1. Determina si el error se produjo en la conexión northbound o southbound. Para obtener más información sobre cómo realizar esta determinación, consulta Cómo determinar la fuente del problema.
  2. Ejecuta la utilidad tcpdump para recopilar más información:
    • Si eres un usuario de la nube privada, puedes recopilar los datos de tcpdump en el cliente o servidor relevante. Un cliente puede ser la app cliente (para conexiones entrantes o hacia el norte) o el procesador de mensajes (para conexiones salientes o hacia el sur). Un servidor puede ser el router perimetral (para conexiones entrantes o hacia el norte) o el servidor de backend (para conexiones salientes o con dirección al sur) según la determinación del paso 1.
    • Si eres un usuario de la nube pública, puedes recopilar los datos de tcpdump solo en la app cliente (para conexiones entrantes o hacia el norte) o en el servidor de backend (para conexiones salientes o hacia el sur), ya que no tienes acceso al router perimetral o al procesador de mensajes.
    tcpdump -i any -s 0 host IP address -w File name
    
    Consulta los datos de tcpdump para obtener más información sobre el uso del comando tcpdump.
  3. Analiza los datos de tcpdump con la herramienta Wireshark o una herramienta similar.
  4. A continuación, verás un ejemplo de análisis de tcpdump con Wireshark:
    • En este ejemplo, se produjo el error de protocolo de enlace TLS/SSL entre el procesador de mensajes y el servidor de backend (la conexión saliente o con dirección sur).
    • El mensaje n.o 4 del resultado de tcpdump que aparece a continuación muestra que el procesador de mensajes (fuente) envió un mensaje “Client Hello” al servidor de backend (destino).

    • Si seleccionas el mensaje Client Hello, aparece que Message Processor usa el protocolo TLSv1.2, como se muestra a continuación:

    • En el mensaje núm. 5, se muestra que el servidor de backend confirma la recepción del mensaje “Hola del cliente” del Message Processor.
    • El servidor de backend envía de inmediato el mensaje Alerta irrecuperable : cerrar notificación al Message Processor (mensaje n° 6). Esto significa que el protocolo de enlace TLS/SSL falló y se cerrará la conexión.
    • Si observas el mensaje n.o 6, se muestra que la causa del error de protocolo de enlace TLS/SSL es que el servidor de backend solo admite el protocolo TLSv1.0, como se muestra a continuación:

    • Debido a que hay una discrepancia entre el protocolo que usa Message Processor y el servidor de backend, este envió el siguiente mensaje: Fatal Alert Message: Close Notify.

Resolución

Message Processor se ejecuta en Java 8 y usa el protocolo TLSv1.2 de forma predeterminada. Si el servidor de backend no es compatible con el protocolo TLSv1.2, puedes realizar uno de los siguientes pasos para resolver este problema:

  1. Actualiza tu servidor de backend para que sea compatible con el protocolo TLSv1.2. Esta es una solución recomendada, ya que el protocolo TLSv1.2 es más seguro.
  2. Si no puedes actualizar tu servidor de backend de inmediato por algún motivo, puedes forzar a Message Processor a usar el protocolo TLSv1.0 para comunicarse con el servidor de backend siguiendo estos pasos:
    1. Si no especificaste un servidor de destino en la definición TargetEndpoint del proxy, configura el elemento Protocol en TLSv1.0 como se muestra a continuación:
      <TargetEndpoint name="default">
       …
       <HTTPTargetConnection>
         <SSLInfo>
             <Enabled>true</Enabled>
             <Protocols>
                 <Protocol>TLSv1.0</Protocol>
             </Protocols>
         </SSLInfo>
         <URL>https://myservice.com</URL>
       </HTTPTargetConnection>
       …
      </TargetEndpoint>
      
    2. Si configuraste un servidor de destino para tu proxy, usa esta API de administración para establecer el protocolo en TLSv1.0 en la configuración específica del servidor de destino.

Discrepancia en el algoritmo de cifrado

Puedes ver una falla del protocolo de enlace TLS/SSL si el servidor no admite el algoritmo del conjunto de algoritmos de cifrado que usa el cliente, ya sea en la conexión entrante (hacia el norte) o saliente (hacia el sur) en Apigee Edge. Consulta también Información sobre las conexiones con dirección norte y sur.

Diagnóstico

  1. Determina si el error se produjo en la conexión northbound o southbound. Para obtener más orientación sobre cómo realizar esta determinación, consulta Cómo determinar la fuente del problema.
  2. Ejecuta la utilidad tcpdump para recopilar más información:
    • Si eres un usuario de la nube privada, puedes recopilar los datos de tcpdump en el cliente o servidor relevante. Un cliente puede ser la app cliente (para conexiones entrantes o hacia el norte) o el procesador de mensajes (para conexiones salientes o hacia el sur). Un servidor puede ser el router perimetral (para conexiones entrantes o hacia el norte) o el servidor de backend (para conexiones salientes o con dirección al sur) según la determinación del paso 1.
    • Si eres un usuario de la nube pública, puedes recopilar los datos de tcpdump solo en la app cliente (para conexiones entrantes o hacia el norte) o en el servidor de backend (para conexiones salientes o hacia el sur), ya que no tienes acceso al router perimetral o al procesador de mensajes.
    tcpdump -i any -s 0 host IP address -w File name
    
    Consulta los datos de tcpdump para obtener más información sobre el uso del comando tcpdump.
  3. Analiza los datos de tcpdump con la herramienta Wireshark o cualquier otra herramienta que conozcas.
  4. Este es el análisis de muestra del resultado de tcpdump con Wireshark:
    • En este ejemplo, se produjo la falla del protocolo de enlace TLS/SSL entre la aplicación cliente y el router Edge (conexión norte). El resultado de tcpdump se recopiló en el router de Edge.
    • El mensaje n.o 4 en el resultado de tcpdump a continuación muestra que la aplicación cliente (origen) envió un mensaje "Client Hello" al router perimetral (destino).

    • Si seleccionas el mensaje Hello del cliente, se muestra que la aplicación cliente usa el protocolo TLSv1.2.

    • En el mensaje 5, se muestra que el router perimetral confirma el mensaje “Hola del cliente” de la aplicación cliente.
    • El router de Edge envía de inmediato una Alerta irrecuperable : error de protocolo de enlace a la aplicación cliente (mensaje n.o 6). Esto significa que el protocolo de enlace TLS/SSL falló y se cerrará la conexión.
    • Si analizas en más detalle el mensaje 6, se muestra la siguiente información:
      • El router perimetral admite el protocolo TLSv1.2. Esto significa que el protocolo coincide entre la aplicación cliente y el router perimetral.
      • Sin embargo, el router de Edge aún envía la alerta irrecuperable: error de protocolo de enlace a la aplicación cliente, como se muestra en la siguiente captura de pantalla:

    • El error podría ser el resultado de uno de los siguientes problemas:
      • La aplicación cliente no usa los algoritmos del conjunto de algoritmos de cifrado compatibles con Edge Router.
      • El router perimetral está habilitado para SNI, pero la aplicación cliente no envía el nombre del servidor.
    • En el mensaje n.o 4 del resultado de tcpdump, se enumeran los algoritmos del conjunto de algoritmos de cifrado compatibles con la aplicación cliente, como se muestra a continuación:

    • La lista de algoritmos del conjunto de algoritmos de cifrado compatibles con Edge Router se incluye en el archivo /opt/nginx/conf.d/0-default.conf. En este ejemplo, Edge Router solo admite los algoritmos del conjunto de algoritmos de cifrado de alta encriptación.
    • La aplicación cliente no usa ninguno de los algoritmos del conjunto de algoritmos de cifrado de alta encriptación. Esta discrepancia es la causa de la falla del protocolo de enlace TLS/SSL.
    • Debido a que el router perimetral está habilitado para SNI, desplázate hacia abajo hasta el mensaje n.o 4 en el resultado de tcpdump y confirma que la aplicación cliente está enviando el nombre del servidor de forma correcta, como se muestra en la siguiente figura:


    • Si este nombre es válido, puedes inferir que la falla del protocolo de enlace TLS/SSL se produjo porque el router perimetral no admite los algoritmos del conjunto de algoritmos de cifrado que usa la aplicación cliente.

Resolución

Debes asegurarte de que el cliente use los algoritmos del conjunto de algoritmos de cifrado que admite el servidor. Para resolver el problema descrito en la sección anterior Diagnóstico, descarga y, luego, instala el paquete de Java Cryptography Extension (JCE) y, luego, inclúyelo en la instalación de Java para que sea compatible con los algoritmos del conjunto de algoritmos de cifrado de alta encriptación.

Certificado incorrecto

Si hay certificados incorrectos en el almacén de claves o en el almacén de confianza, se produce una falla del protocolo de enlace TLS/SSL, ya sea en la conexión entrante (en sentido norte) o saliente (en sentido sur) en Apigee Edge. Consulta también Información sobre las conexiones con dirección norte y sur.

Si el problema es northbound, es posible que veas mensajes de error diferentes según la causa subyacente.

En las siguientes secciones, se enumeran ejemplos de mensajes de error y los pasos para diagnosticar y resolver este problema.

Mensajes de error

Es posible que veas diferentes mensajes de error según la causa de la falla del protocolo de enlace TLS/SSL. A continuación, se muestra un ejemplo de mensaje de error que puedes ver cuando llamas a un proxy de API:

* SSL certificate problem: Invalid certificate chain
* Closing connection 0
curl: (60) SSL certificate problem: Invalid certificate chain
More details here: http://curl.haxx.se/docs/sslcerts.html

Causas posibles

Las causas típicas de este problema son las siguientes:

Causa Descripción Quién puede realizar los pasos para solucionar problemas
El nombre de host no coincide El nombre de host usado en la URL y el certificado del almacén de claves del router no coinciden. Por ejemplo, se produce una discrepancia si el nombre de host que se usó en la URL es myorg.domain.com, mientras que el certificado tiene el nombre de host en su CN como CN=something.domain.com.

Usuarios de la nube pública y privada de Edge
Cadena de certificados incompleta o incorrecta La cadena de certificados no está completa o no es correcta. Solo usuarios de la nube pública y privada perimetral
El servidor o el cliente envió un certificado vencido o desconocido El servidor o el cliente envía un certificado vencido o desconocido, ya sea en la conexión con dirección norte o en la dirección sur. Usuarios de la nube privada perimetral y de la nube pública perimetral

El nombre de host no coincide

Diagnóstico

  1. Ten en cuenta el nombre de host que se usa en la URL que muestra la siguiente llamada a la API de Edge Management:
    curl -v https://myorg.domain.com/v1/getinfo
    Por ejemplo:
    curl -v https://api.enterprise.apigee.com/v1/getinfo
  2. Obtén el CN usado en el certificado almacenado en el almacén de claves específico. Puedes usar las siguientes APIs de administración de Edge para obtener los detalles del certificado:
    1. Obtén el nombre del certificado en el almacén de claves:

      Si eres un usuario de la nube privada, usa la API de Management de la siguiente manera:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      Si eres un usuario de la nube pública, usa la API de Management de la siguiente manera:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
    2. Obtén los detalles del certificado en el almacén de claves con la API de Edge Management.

      Si eres un usuario de la nube privada, haz lo siguiente:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
      Si eres un usuario de la nube pública, haz lo siguiente:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      

      Certificado de muestra:

      "certInfo": [
          {
            "basicConstraints": "CA:FALSE",
            "expiryDate": 1456258950000,
            "isValid": "No",
            "issuer": "SERIALNUMBER=07969287, CN=Go Daddy Secure Certification Authority, OU=http://certificates.godaddy.com/repository, O=\"GoDaddy.com, Inc.\", L=Scottsdale, ST=Arizona, C=US",
            "publicKey": "RSA Public Key, 2048 bits",
            "serialNumber": "07:bc:a7:39:03:f1:56",
            "sigAlgName": "SHA1withRSA",
            "subject": "CN=something.domain.com, OU=Domain Control Validated, O=something.domain.com",
            "validFrom": 1358287055000,
            "version": 3
          },
      

      El nombre del asunto del certificado principal tiene el CN: something.domain.com.

      Debido a que el nombre de host usado en la URL de solicitud a la API (consulta el paso 1 anterior) y el nombre del asunto del certificado no coinciden, se produce la falla del protocolo de enlace TLS/SSL.

Resolución

Este problema se puede resolver de una de las siguientes dos maneras:

  • Obtén un certificado (si aún no tienes uno) en el que el CN del sujeto tenga un certificado comodín y, luego, sube la nueva cadena de certificados completa al almacén de claves. Por ejemplo:
    "subject": "CN=*.domain.com, OU=Domain Control Validated, O=*.domain.com",
  • Obtén un certificado (si aún no tienes uno) con un CN de asunto existente, pero usa your-org.your-domain como nombre alternativo del asunto. Luego, sube la cadena de certificados completa al almacén de claves.

Referencias

Almacenes de claves y almacenes de confianza

Cadena de certificados incompleta o incorrecta

Diagnóstico

  1. Obtén el CN usado en el certificado almacenado en el almacén de claves específico. Puedes usar las siguientes APIs de administración de Edge para obtener los detalles del certificado:
    1. Obtén el nombre del certificado en el almacén de claves:

      Si eres un usuario de la nube privada, haz lo siguiente:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
      Si eres un usuario de la nube pública, haz lo siguiente:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      
    2. Obtén los detalles del certificado en el almacén de claves:

      Si eres un usuario de la nube privada, haz lo siguiente:
      curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
      Si eres un usuario de la nube pública, haz lo siguiente:
      curl -v https://api.enterprise.apigee.com/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
      
    3. Valida el certificado y su cadena, y verifica que cumpla con los lineamientos proporcionados en el artículo Cómo funcionan las cadenas de certificados para asegurarte de que sea una cadena de certificados válida y completa. Si la cadena de certificados almacenada en el almacén de claves está incompleta o no es válida, verás la falla del protocolo de enlace TLS/SSL.
    4. En el siguiente gráfico, se muestra un certificado de muestra con una cadena de certificados no válida, en la que los certificados intermedios y raíz no coinciden:
    5. Ejemplo de certificado intermedio y raíz en los que el emisor y el sujeto no coinciden


Resolución

  1. Obtén un certificado (si aún no tienes uno) que incluya una cadena de certificados completa y válida.
  2. Ejecuta el siguiente comando openssl para verificar que la cadena de certificados sea correcta y esté completa:
    openssl verify -CAfile root-cert -untrusted intermediate-cert main-cert
  3. Sube la cadena de certificados validada al almacén de claves.

Certificado vencido o desconocido que envió el servidor o el cliente

Si el servidor o cliente envía un certificado incorrecto o vencido en el norte o en la conexión sur, el otro extremo (servidor o cliente) rechaza el certificado, lo que provoca una falla del protocolo de enlace TLS/SSL.

Diagnóstico

  1. Determina si el error se produjo en la conexión northbound o southbound. Para obtener más información sobre cómo realizar esta determinación, consulta Cómo determinar la fuente del problema.
  2. Ejecuta la utilidad tcpdump para recopilar más información:
    • Si eres un usuario de la nube privada, puedes recopilar los datos de tcpdump en el cliente o servidor relevante. Un cliente puede ser la app cliente (para conexiones entrantes o hacia el norte) o el procesador de mensajes (para conexiones salientes o hacia el sur). Un servidor puede ser el router perimetral (para conexiones entrantes o hacia el norte) o el servidor de backend (para conexiones salientes o con dirección al sur) según la determinación del paso 1.
    • Si eres un usuario de la nube pública, puedes recopilar los datos de tcpdump solo en la app cliente (para conexiones entrantes o hacia el norte) o en el servidor de backend (para conexiones salientes o hacia el sur), ya que no tienes acceso al router perimetral o al procesador de mensajes.
    tcpdump -i any -s 0 host IP address -w File name
    
    Consulta los datos de tcpdump para obtener más información sobre el uso del comando tcpdump.
  3. Analiza los datos de tcpdump con Wireshark o una herramienta similar.
  4. A partir del resultado de tcpdump, determina el host (cliente o servidor) que rechazará el certificado durante el paso de verificación.
  5. Puedes recuperar el certificado que enviaste desde el otro extremo del resultado de tcpdump, siempre que los datos no estén encriptados. Esto será útil para comparar si este certificado coincide con el certificado disponible en el almacén de confianza.
  6. Revisa el tcpdump de muestra para la comunicación SSL entre el Message Processor y el servidor de backend.

    Ejemplo tcpdump que muestra un error de certificado desconocido


    1. Message Processor (cliente) envía “Client Hello” al servidor de backend (servidor) en el mensaje núm. 59.
    2. El servidor de backend envía “Server Hello” al Message Processor en el mensaje n.o 61.
    3. Validan mutuamente el protocolo y los algoritmos del conjunto de algoritmos de cifrado que se usan.
    4. El servidor de backend envía el certificado y el mensaje del servidor Hello Done al procesador de mensajes en el mensaje n.o 68.
    5. El procesador de mensajes envía la alerta “Description: Certificate Unknown” en el mensaje n.o 70.
    6. Si profundizamos en el mensaje n.o 70, no hay detalles adicionales además del mensaje de alerta, como se muestra a continuación:


    7. Revisa el mensaje n.o 68 para obtener los detalles sobre el certificado que envió el servidor de backend, como se muestra en el siguiente gráfico:

    8. El certificado del servidor de backend y su cadena completa están disponibles en la sección "Certificados", como se muestra en la figura anterior.
  7. Si el router (enlace norte) o el procesador de mensajes (en sentido sur) no conoce el certificado, como en el ejemplo ilustrado anterior, sigue estos pasos:
    1. Obtén el certificado y su cadena que se almacena en el almacén de confianza específico. (Consulta la configuración del host virtual de la configuración del router y del extremo de destino para Message Processor). Puedes usar las siguientes APIs para obtener los detalles del certificado:
      1. Obtén el nombre del certificado en el almacén de confianza:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs
      2. Obtén los detalles del certificado en el almacén de confianza:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/truststore-name/certs/cert-name
    2. Comprueba si el certificado almacenado en el almacén de confianza del router (enlace norte) o en el procesador de mensajes (en sentido sur) coincide con el certificado almacenado en el almacén de claves de la aplicación cliente (en el norte) o del servidor de destino (con dirección sur), o con el que se obtiene del resultado de tcpdump. Si no hay coincidencia, esa es la causa de la falla del protocolo de enlace TLS/SSL.
  8. Si descubres que el certificado es desconocido para la aplicación cliente (enlace norte) o el servidor de destino (hacia el sur), sigue estos pasos:
    1. Obtén la cadena de certificados completa usada en el certificado almacenado en el almacén de claves específico. (Consulta la configuración del host virtual de la configuración del router y del extremo de destino para Message Processor). Puedes usar las siguientes APIs para obtener los detalles del certificado:
      1. Obtén el nombre del certificado en el almacén de claves:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs
      2. Obtén los detalles del certificado en el almacén de claves:
        curl -v https://management-server-ip:port/v1/organizations/org-name/environments/env-name/keystores/keystore-name/certs/cert-name
        
    2. Comprueba si el certificado almacenado en el almacén de claves del router (hacia el norte) o del procesador de mensajes (en sentido sur) coincide con el certificado almacenado en el almacén de confianza de la aplicación cliente (enlace norte) o el servidor de destino (con dirección sur), o con el que se obtiene del resultado de tcpdump. Si no hay coincidencia, esa es la causa de la falla del protocolo de enlace SSL.
  9. Si se descubre que el certificado enviado por un servidor o cliente está vencido, el cliente o servidor receptor lo rechaza y verás el siguiente mensaje de alerta en tcpdump:

    Alerta (nivel: Fatal, Descripción: Certificado vencido)

  10. Verifica que el certificado del almacén de claves del host adecuado haya vencido.

Resolución

Para resolver el problema identificado en el ejemplo anterior, sube el certificado del servidor de backend válido al trustore de Message Processor.

En la siguiente tabla, se resumen los pasos para resolver el problema según su causa.

Causa Descripción Solución
Certificado vencido NorthBound
  • El certificado almacenado en el almacén de claves del router está vencido.
  • El certificado almacenado en el almacén de claves de la aplicación cliente está vencido (SSL bidireccional).
Sube un certificado nuevo y su cadena completa al almacén de claves en el host adecuado.
SouthBound
  • El certificado almacenado en el almacén de claves del servidor de destino está vencido.
  • El certificado almacenado en el almacén de claves de Message Processor está vencido (SSL bidireccional).
Sube un certificado nuevo y su cadena completa al almacén de claves en el host adecuado.
Certificado desconocido NorthBound
  • El certificado almacenado en el almacén de confianza de la aplicación cliente no coincide con el certificado del router.
  • El certificado almacenado en el almacén de confianza del router no coincide con el certificado de la aplicación cliente (SSL bidireccional).
Sube el certificado válido al almacén de confianza en el host adecuado.
SouthBound
  • El certificado almacenado en el almacén de confianza del servidor de destino no coincide con el certificado de Message Processor.
  • El certificado almacenado en el almacén de confianza de Message Processor no coincide con el certificado del servidor de destino (SSL bidireccional).
Sube el certificado válido al almacén de confianza en el host adecuado.

Servidor habilitado para SNI

La falla del protocolo de enlace TLS/SSL puede ocurrir cuando el cliente se comunica con un servidor habilitado de indicación de nombre del servidor (SNI), pero el cliente no tiene SNI habilitada. Esto puede ocurrir en el norte o en la conexión con el norte en el sur de Edge.

Primero, debes identificar el nombre de host y el número de puerto del servidor que se usa y verificar si está SNI habilitado o no.

Identificación del servidor habilitado para SNI

  1. Ejecuta el comando openssl y trata de conectarte al nombre de host del servidor relevante (Edge Router o servidor de backend) sin pasar el nombre del servidor, como se muestra a continuación:
    openssl s_client -connect hostname:port
    
    Es posible que obtengas los certificados y, a veces, observes la falla del protocolo de enlace en el comando openssl, como se muestra a continuación:
    CONNECTED(00000003)
    9362:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.6/src/ssl/s23_clnt.c:593
    
  2. Ejecuta el comando openssl y trata de conectarte al nombre de host del servidor relevante (router de Edge o servidor de backend). Para ello, pasa el nombre del servidor como se muestra a continuación:
    openssl s_client -connect hostname:port -servername hostname
    
  3. Si obtienes una falla de protocolo de enlace en el paso 1 o si obtienes certificados diferentes en los pasos 1 y 2, significa que el servidor especificado tiene habilitada la SNI.

Una vez que hayas identificado que el servidor tiene habilitada la SNI, puedes seguir los pasos que se indican a continuación para verificar si la falla del protocolo de enlace TLS/SSL se debe a que el cliente no puede comunicarse con el servidor de SNI.

Diagnóstico

  1. Determina si el error se produjo en la conexión northbound o southbound. Para obtener más información sobre cómo realizar esta determinación, consulta Cómo determinar la fuente del problema.
  2. Ejecuta la utilidad tcpdump para recopilar más información:
    • Si eres un usuario de la nube privada, puedes recopilar los datos de tcpdump en el cliente o servidor relevante. Un cliente puede ser la app cliente (para conexiones entrantes o hacia el norte) o el procesador de mensajes (para conexiones salientes o hacia el sur). Un servidor puede ser el router perimetral (para conexiones entrantes o hacia el norte) o el servidor de backend (para conexiones salientes o con dirección al sur) según la determinación del paso 1.
    • Si eres un usuario de la nube pública, puedes recopilar los datos de tcpdump solo en la app cliente (para conexiones entrantes o hacia el norte) o en el servidor de backend (para conexiones salientes o hacia el sur), ya que no tienes acceso al router perimetral o al procesador de mensajes.
    tcpdump -i any -s 0 host IP address -w File name
    
    Consulta los datos de tcpdump para obtener más información sobre el uso del comando tcpdump.
  3. Analiza el resultado de tcpdump con Wireshark o una herramienta similar.
  4. Este es el análisis de muestra de tcpdump con Wireshark:
    1. En este ejemplo, se produjo la falla del protocolo de enlace TLS/SSL entre el procesador de mensajes perimetrales y el servidor de backend (conexión con dirección sur).
    2. El mensaje n.o 4 en el resultado de tcpdump a continuación muestra que Message Processor (origen) envió un mensaje “Client Hello” al servidor de backend (destino).

    3. Cuando seleccionas el mensaje “Client Hello”, se muestra que el procesador de mensajes usa el protocolo TLSv1.2.

    4. El mensaje n.o 4 muestra que el servidor de backend confirma la recepción del mensaje “Client Hello” del Message Processor.
    5. El servidor de backend envía de inmediato una Alerta irrecuperable : error de protocolo de enlace al Message Processor (mensaje n.o 5). Esto significa que se produjo un error en el protocolo de enlace TLS/SSL y se cerrará la conexión.
    6. Revisa el mensaje 6 para descubrir la siguiente información.
      • El servidor de backend no es compatible con el protocolo TLSv1.2. Esto significa que el protocolo coincidió entre Message Processor y el servidor de backend.
      • Sin embargo, el servidor de backend igualmente envía la Alerta irrecuperable: error de protocolo de enlace al Message Processor, como se muestra en la siguiente figura:

    7. Este error puede ocurrir por uno de los siguientes motivos:
      • Message Processor no usa los algoritmos del conjunto de algoritmos de cifrado compatibles con el servidor de backend.
      • El servidor de backend tiene habilitada la SNI, pero la aplicación cliente no envía el nombre del servidor.
    8. Revisa con más detalle el mensaje n.o 3 (Client Hello) en el resultado de tcpdump. Ten en cuenta que falta la sección Extension: server_name, como se muestra a continuación:

    9. Esto confirma que el procesador de mensajes no envió el server_name al servidor de backend con SNI habilitado.
    10. Esta es la causa de la falla del protocolo de enlace TLS/SSL y el motivo por el que el servidor de backend envía la alerta irrecuperable: error de protocolo de enlace al procesador de mensajes.
  5. Verifica que jsse.enableSNIExtension property en system.properties esté configurado como falso en Message Processor a fin de confirmar que Message Processor no esté habilitado para comunicarse con el servidor habilitado para SNI.

Resolución

Sigue estos pasos para permitir que los procesadores de mensajes se comuniquen con los servidores habilitados para SNI:

  1. Crea el archivo /opt/apigee/customer/application/message-processor.properties (si aún no existe).
  2. Agrega la siguiente línea a este archivo: conf_system_jsse.enableSNIExtension=true
  3. Elige al propietario de este archivo apigee:apigee:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Reinicia Message Processor.
    /opt/apigee/apigee-service/bin/apigee-service message-processor restart
  5. Si tienes más de un Message Processor, repite los pasos del 1 al 4 en todos ellos.

Si no puedes determinar la causa de la falla del protocolo de enlace TLS/SSL y solucionar el problema, o si necesitas más ayuda, comunícate con el equipo de asistencia de Apigee Edge. Comparte los detalles completos del problema junto con el resultado de tcpdump.