Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
Síntoma
La aplicación cliente recibe una respuesta HTTP 400 - Solicitud incorrecta con el mensaje "The SSL certificate error". Por lo general, este error lo envía el router de Edge en una configuración de TLS bidireccional habilitada para la conexión entrante a Apigee Edge.
Mensaje de error
La aplicación cliente obtiene el siguiente código de respuesta:
HTTP/1.1 400 Bad Request
Seguido de la siguiente página de error HTML:
<html>
<head>
<title>400 The SSL certificate error</title>
</head>
<body bgcolor="white">
<center> <h1>400 Bad Request</h1>
</center>
<center>The SSL certificate error</center>
<hr>
<center>nginx</center>
</body>
</html>Causas posibles
Las siguientes son las posibles causas de este problema:
| Causa | Descripción | Instrucciones de solución de problemas aplicables para |
| Certificado de cliente vencido | El certificado que envió el cliente venció. | Usuarios de la nube pública y privada de Edge |
| Certificado incorrecto enviado por el cliente | Este error se produce si el certificado que envió la aplicación cliente no coincide con el certificado almacenado en el almacén de confianza del router de Edge. | Usuarios de la nube pública y privada de Edge |
| Falta el certificado raíz del cliente en el almacén de confianza | Este error se produce si falta el certificado raíz firmado por la CA del cliente en el almacén de confianza del router de Edge. | Usuarios de la nube pública y privada de Edge |
| No se cargaron los certificados de cliente en el router de Edge | Este error se produce si los certificados de cliente subidos al almacén de confianza no se cargan en el router. | Usuarios de la nube privada de Edge |
Causa: Certificado de cliente vencido
Por lo general, este problema ocurre para una TLS bidireccional, cuando vence el certificado que envía el cliente. En una TLS bidireccional, tanto el cliente como el servidor intercambian sus certificados públicos para completar el protocolo de enlace. El cliente valida el certificado del servidor y el servidor valida el certificado del cliente.
En Edge, la TLS bidireccional se implementa en el host virtual, donde el certificado del servidor se agrega al almacén de claves y el certificado del cliente se agrega a los almacenes de confianza.
Durante el protocolo de enlace TLS, si se descubre que el certificado del cliente venció, el servidor enviará 400 - Solicitud incorrecta con el mensaje "The SSL certificate error".
Diagnóstico
Accede a la IU de Edge y consulta la configuración específica del host virtual (Administrador > Hosts virtuales) para la que se realiza la solicitud a la API o usa la API de administración de Get virtual host API para obtener la definición del host virtual específico.
Por lo general, un host virtual para la comunicación TLS bidireccional se ve de la siguiente manera:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>Determina la referencia del almacén de confianza que se usa en el host virtual. En el ejemplo anterior, el nombre de referencia del almacén de certificados de confianza es myTruststoreRef.
- Determina el almacén de certificados de confianza al que apunta la referencia del almacén de certificados de confianza.
- En la IU de Edge, navega a Administrador > Entornos > Referencias y busca el nombre de referencia del almacén de certificados de confianza.
Ten en cuenta el nombre en la columna Referencia para la referencia específica del almacén de confianza. Este será el nombre del almacén de certificados de confianza.
Figura 1 En el ejemplo anterior, observa que myTruststoreRef tiene la referencia a myTruststore. Por lo tanto, el nombre del almacén de confianza es myTruststore.
- En Administrador > Entornos > Almacenes de claves de TLS en la IU de Edge, navega a Almacenes de claves de TLS y busca el almacén de certificados de confianza que se encontró en el paso 3.
Selecciona el certificado en el almacén de confianza específico (determinado en el paso 3 anterior) como se muestra a continuación:
Figura 2 El certificado con el alias
client-cert-markwen el ejemplo anterior muestra que venció.- Verifica si el certificado venció para el alias del certificado de tu almacén de confianza.
- Si el certificado no venció, pasa a Pasos comunes de diagnóstico para las otras causas.
Solución
Obtén un certificado nuevo y súbelo:
- Crea un nuevo almacén de confianza, por ejemplo, myNewTruststore.
- Sube el certificado nuevo al almacén de certificados de confianza recién creado.
Modifica la referencia del almacén de confianza que se usa en el host virtual específico para que apunte al nuevo almacén de confianza con los pasos que se indican en Modifica una referencia.
En el ejemplo descrito anteriormente, apunta la referencia myTruststoreRef a myNewTruststore.
Pasos comunes de diagnóstico para las otras causas
- Para investigar este problema, deberás capturar paquetes TCP/IP con la
tcpdump herramienta.
- Si eres usuario de nube privada, puedes capturar los paquetes TCP/IP en la aplicación cliente o el router.
- Si eres usuario de nube pública, captura los paquetes TCP/IP en la aplicación cliente.
Una vez que decidas dónde deseas capturar paquetes TCP/IP, usa el siguiente tcpdump comando para capturarlos:
tcpdump -i any -s 0 host <IP address> -w <File name>
Nota: Si tomas los paquetes TCP/IP en el router, usa la dirección IP pública de la aplicación cliente en el
tcpdumpcomando.Si tomas los paquetes TCP/IP en la aplicación cliente, usa la dirección IP pública del nombre de host que se usa en el host virtual en el
tcpdumpcomando.Consulta tcpdump para obtener más información sobre esta herramienta y otras variantes de este comando.
- Analiza los paquetes TCP/IP recopilados con la herramienta Wireshark o una herramienta similar con la que estés familiarizado.
Aquí tienes el análisis de los datos de ejemplo de paquetes TCP/IP con la herramienta Wireshark:
- El paquete n.° 30 en tcpdump (imagen a continuación) muestra que la aplicación cliente (origen) envió un "Client Hello" message to the Router (destination).
- El paquete n.° 34 muestra que el router reconoce el mensaje Client Hello de la aplicación cliente.
- El router envía el "Server Hello" en el paquete n.° 35 y, luego, envía su certificado y también solicita a la aplicación cliente que envíe su certificado en el paquete n.° 38.
- En el paquete n.° 38, en el que el router envía el paquete "Certificate Request", consulta la sección "Nombres distinguidos", que proporciona detalles sobre el certificado de cliente, su cadena y las autoridades certificadoras que acepta el router (servidor).
La aplicación cliente envía su certificado en el paquete n.° 41. Consulta la sección Certificate Verify en el paquete n.° 41 y determina el certificado que envía la aplicación cliente.
Figura 4 - Verifica si el asunto y el emisor del certificado y su cadena que envió la aplicación cliente (paquete n.° 41) coinciden con el certificado aceptado y su cadena del router (paquete n.° 38). Si hay una falta de coincidencia, esa es la causa de este error. Por lo tanto, el router (servidor) envía la alerta encriptada (paquete n.° 57) seguida de FIN, ACK (paquete n.° 58) a la aplicación cliente y, finalmente, se finaliza la conexión.
- La falta de coincidencia del certificado y su cadena puede deberse a las situaciones que se describen en las siguientes secciones.
Causa: El cliente envió un certificado incorrecto
Por lo general, esto sucede si el asunto o el emisor del certificado o su cadena que envió la aplicación cliente no coinciden con el certificado o su cadena almacenados en el almacén de confianza del router (servidor).
Diagnóstico
Accede a la IU de Edge y consulta la configuración específica del host virtual (Administrador > Hosts virtuales) para la que se realiza la solicitud a la API o usa la API de administración de Get virtual host para obtener la definición del host virtual específico.
Por lo general, un host virtual para la comunicación TLS bidireccional se ve de la siguiente manera:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>- Determina la referencia del almacén de confianza que se usa en el host virtual.
En el ejemplo anterior, el nombre de referencia del almacén de confianza es myCompanyTruststoreRef.
- Determina el almacén de confianza al que apunta la referencia del almacén de confianza.
- En la IU de Edge, navega a Administrador > Entornos > Referencias y busca el nombre de referencia del almacén de certificados de confianza.
Ten en cuenta el nombre en la columna Referencia para la referencia específica del almacén de confianza. Este será el nombre del almacén de certificados de confianza.
Figura 5 En el ejemplo anterior, observa que myCompanyTruststoreRef tiene la referencia a myCompanyTruststore. Por lo tanto, el nombre del almacén de confianza es myCompanyTruststore.
- Obtén los certificados almacenados en el almacén de certificados de confianza (determinado en el paso anterior) con las siguientes APIs:
API de List certificates for a keystore or truststore.
Esta API enumera todos los certificados en el almacén de confianza específico.
API de Get cert details from a keystore or truststore.
Esta API muestra información sobre un certificado específico en el almacén de confianza específico.
- Verifica si el emisor y el asunto de cada certificado y su cadena almacenados en myCompanyTruststore coinciden con los del certificado y su cadena, como se ve en los paquetes TCP/IP (consulta el paquete n.° 38) más arriba. Si hay una falta de coincidencia, indica que los certificados subidos al almacén de certificados de confianza no se cargan en el router de Edge. Pasa a Causa: No se cargaron los certificados de cliente en el router de Edge.
- Si no se encontró ninguna falta de coincidencia en el paso 5, indica que la aplicación cliente no envió el certificado correcto ni su cadena.
Solución
Asegúrate de que la aplicación cliente envíe a Edge el certificado correcto y su cadena.
Causa: Falta el certificado raíz del cliente en el almacén de confianza
Este error se produce si falta el certificado raíz firmado por la CA del cliente en el almacén de confianza del router de Edge.
Diagnóstico
Accede a la IU de Edge y consulta la configuración específica del host virtual para la que se realiza la solicitud a la API (Administrador > Hosts virtuales > virtual_host), o usa la API de Get virtual host para obtener la definición del host virtual específico.
Por lo general, un host virtual para la comunicación TLS bidireccional se ve de la siguiente manera:
<VirtualHost name="myTLSVHost"> <HostAliases> <HostAlias>api.myCompany.com</HostAlias> </HostAliases> <Port>443</Port> <SSLInfo> <Enabled>true</Enabled> <ClientAuthEnabled>true</ClientAuthEnabled> <KeyStore>ref://myKeystoreRef</KeyStore> <KeyAlias>myKeyAlias</KeyAlias> <TrustStore>ref://myCompanyTruststoreRef</TrustStore> </SSLInfo> </VirtualHost>- Determina la referencia del almacén de confianza que se usa en el host virtual. En el ejemplo anterior, el nombre de referencia del almacén de confianza es myCompanyTruststoreRef.
- Determina el almacén de certificados de confianza real que usa la referencia del almacén de certificados de confianza.
- En la IU de Edge, navega a Administrador > Entornos > Referencias y busca el nombre de referencia del almacén de certificados de confianza.
El nombre del almacén de confianza para la referencia específica del almacén de confianza se encuentra en la Referencia columna.
Figura 6 En este ejemplo, observa que myCompanyTruststoreRef tiene myCompanyTruststore en la columna Referencia. Por lo tanto, el nombre del almacén de confianza es myCompanyTruststore.
- Obtén los certificados almacenados en el almacén de certificados de confianza (determinado en el paso anterior) con
las siguientes APIs:
- API de List certificates for a keystore or truststore. Esta API enumera todos los certificados en el almacén de confianza.
- API de Get cert details from a keystore or truststore. Esta API muestra información sobre un certificado específico en el almacén de confianza.
Verifica si el certificado incluye una cadena completa, incluido el certificado raíz que envió el cliente específico, como se ve en los paquetes TCP/IP (consulta la Figura 4). El almacén de confianza debe incluir el certificado raíz, así como el certificado de hoja del cliente o el certificado de hoja e intermedio. Si falta el certificado raíz válido del cliente en el almacén de confianza, esa es la causa del error.
Sin embargo, si la cadena de certificados completa del cliente, incluido el certificado raíz, existe en el almacén de certificados de confianza, indica que es posible que los certificados subidos al almacén de certificados de confianza no se carguen en el router de Edge. Si ese es el caso, consulta Causa: No se cargaron los certificados de cliente en el router de Edge.
Solución
Asegúrate de que el certificado correcto del cliente, incluido el certificado raíz, esté disponible en el almacén de certificados de confianza del router de Apigee Edge.
Causa: No se cargaron los certificados de cliente en el router de Edge
- Si eres usuario de nube pública, comunícate con Asistencia de Apigee Edge.
- Si eres usuario de nube privada, sigue las instrucciones que se indican a continuación en cada router:
- Verifica si existe el archivo
/opt/nginx/conf.d/OrgName_envName_vhostName-client.pempara el host virtual específico. Si el archivo no existe, pasa a la Resolución sección que se encuentra a continuación. - Si el archivo existe, usa el siguiente
opensslcomando para obtener los detalles de los certificados que están disponibles en el router de Edge:openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
- Verifica el emisor, el asunto y la fecha de vencimiento del certificado. Si alguno de estos no coincide con lo que se observó en el almacén de certificados de confianza en la IU de Edge o con las APIs de administración, esa es la causa del error.
- Es posible que el router no haya vuelto a cargar los certificados subidos.
- Verifica si existe el archivo
Solución
Reinicia el router para asegurarte de que se carguen los certificados más recientes con el siguiente paso:
apigee-service edge-router restart
Vuelve a ejecutar las APIs y verifica los resultados. Si el problema persiste, consulta Recopila información de diagnóstico.
Recopila información de diagnóstico
Si el problema persiste incluso después de seguir las instrucciones anteriores, recopila la siguiente información de diagnóstico. Comunícate con Asistencia de Apigee Edge y comparte la información que recopiles:
- Si eres usuario de la nube pública, proporciona la siguiente información:
- Nombre de la organización
- Nombre del entorno
- Nombre del proxy de API
- Nombre del host virtual
- Nombre del alias del host
- Comando curl completo para reproducir el error
- Paquetes TCP/IP capturados en la aplicación cliente
- Si eres usuario de la nube privada, proporciona la siguiente información:
- Nombre del host virtual y su definición con la API de Get virtual host
- Nombre del alias del host
- Mensaje de error completo observado
- Paquetes TCP/IP capturados en la aplicación cliente o el router
- Resultado de la API de List the certificates from the keystore y también los detalles de cada certificado obtenido con la API de Get cert details.
- Detalles sobre las secciones de esta guía que probaste y cualquier otra información que nos ayude a acelerar la resolución de este problema