Si su sitio web con Deflect se enfrenta a errores HTTP 421, 403 o 400, existe la posibilidad de que se trate de un problema SNI. Este artículo pretende guiarle en la resolución de este problema.
1. ¿Qué es el SNI? #
El Indicador de Nombre de Servidor (SNI) es una extensión del protocolo de Seguridad de Capa de Transporte (TLS) que indica a qué nombre de host está intentando conectarse el cliente al principio del proceso de handshaking.
Esto permite a un servidor presentar múltiples certificados en la misma dirección IP y número de puerto, y por lo tanto permite que múltiples sitios web HTTPS seguros sean servidos desde la misma dirección IP sin requerir que todos esos sitios utilicen el mismo certificado.
2. SNI y encabezado de host HTTP #
La cabecera HTTP host también se utiliza para indicar a qué sitio está intentando acceder un cliente. Pero no se envía una vez establecida la conexión SSL.
En otras palabras, tanto SNI como el encabezado de host HTTP permiten al cliente especificar el nombre del servidor al que intenta acceder. Sin embargo, SNI permite que esta información esté presente antes en el proceso de configuración SSL, lo que es crucial cuando varios sitios web SSL comparten una misma dirección IP.
No todos los servidores web requieren la alineación del nombre SNI y la cabecera HTTP Host. En los casos en los que no coinciden, la cabecera HTTP Host suele tener preferencia. Sin embargo, algunos servidores web, como Apache, han comenzado recientemente a exigir la coincidencia del SNI y el nombre de host HTTP, creando así un problema de SNI.
3. Identificación del problema SNI #
Es posible que se trate de un problema de conexión SNI, si su sitio web protegido por Deflect se enfrenta al siguiente error HTTP:
- 421 Solicitud mal dirigida
O está viendo el siguiente error en parte o en su totalidad:
- 403 Prohibido
- 400 Solicitud errónea
Y una de las siguientes condiciones se aplica a usted:
- Ha actualizado recientemente su servidor web de origen
- Ha actualizado recientemente la configuración de su servidor web de origen
- Está utilizando Apache como servidor de origen
- Usted aloja varios hosts virtuales en un servidor de origen
3.1. Inspeccionar el registro del servidor web #
Inspeccione el registro de su servidor web de origen en busca de mensajes de error. Por ejemplo, si ves el siguiente mensaje en el registro de errores de Apache, indica que te enfrentas a un problema SNI.
AH02032: Hostname example.com provided via SNI and hostname www.example.net provided via HTTP are different
3.2. Conectarse directamente al servidor de origen #
Compruebe si se encuentra con un problema SNI porque su sitio web se encuentra detrás del proxy inverso Nginx de Deflect.
Tenga en cuenta que no es necesario desactivar Deflect universalmente para realizar esta prueba. En su lugar, puede ejecutar cómodamente el siguiente comando cURL para obligar a la resolución DNS a la IP de su servidor de origen.
curl --resolve <domain name>:443:<origin server IP> -k "https://<domain name>"
Si no puede ejecutar el comando cURL, tiene la alternativa de modificar su /etc/hosts local (o C:\Windows\System32\drivers\etc\hosts para usuarios de Windows). Esto le permite obligar manualmente a un nombre de dominio para resolver a su IP del servidor de origen. Recuerde revertir el cambio una vez que haya terminado las pruebas.
3.3. Servidor de origen Apache #
El 10 de julio de 2025, Apache lanzó la versión 2.4.64, con parches de seguridad específicos sobre el manejo de SNI. Básicamente, esta nueva actualización rechazará una conexión si el nombre SNI en el paquete de intercambio de Secure Sockets Layer (SSL) no coincide con la cabecera Host dentro del paquete HTTP de esa conexión SSL en particular. Consulte el registro de cambios de Apache.
Los sitios web que utilizan Nginx como proxy inverso y Apache como servidor de origen se ven afectados por esta actualización. Esto se debe a que en una configuración de proxy inverso, Nginx no retransmite por defecto el nombre SNI al servidor de origen.
4. Resolución del problema SNI #
4.1. Compruebe si SNI está activado para su sitio web #
Deflect activa automáticamente el SNI para los sitios web registrados a partir de finales de 2024. Pero nuestro equipo de soporte puede desactivarla manualmente. Para comprobar si esta función está activada o no para su sitio web, puede iniciar sesión en el panel de control de Deflect y buscar esta configuración en Configuración -> Indicación de nombre de servidor (SNI).
En la mayoría de los casos, es aconsejable mantener esta configuración activada, sólo en raras circunstancias será necesario desactivarla. Sin embargo, si el problema persiste incluso después de activar SNI, es posible que desee considerar la posibilidad de desactivar la reutilización de sesiones SSL.
4.2. Desactivar la reutilización de sesiones SSL #
De forma predeterminada, Deflect reutiliza la sesión SSL en el grupo de conexiones del servidor de origen idéntico para su optimización. Sin embargo, si su servidor de origen aloja varios hosts virtuales con nombres de dominio diferentes, desactivar la reutilización de la sesión SSL puede resolver el error SNI mismatch.
En el panel de control de Deflect, puede localizar esta función en Labs -> Disable SSL Session Reuse.
4.3. Múltiples hosts virtuales #
Si está operando múltiples hosts virtuales en la misma dirección IP de origen bajo Deflect, se aconseja revisar la configuración del servidor web respectivo, y habilitar tanto SNI como la deshabilitación de la reutilización de sesiones SSL en todos estos hosts virtuales.
4.4. dominios www #
Si su sitio web utiliza tanto el dominio apex como el dominio www, con este último añadido automáticamente por Deflect y proxyado a la misma IP de origen, considere añadir el nombre de dominio www dentro del nombre de su servidor en la configuración de su servidor web.
4.5. Asegúrese de que el nombre común del certificado de origen coincide con el nombre de host #
Es posible que desee asegurarse de que el nombre común (CN) del certificado SSL de su servidor de origen coincide con el nombre de host solicitado por el visitante. Puede comprobarlo conectándose directamente a su servidor de origen mediante cURL.
curl --resolve <domain name>:443:<origin server IP> -k "https://<domain name>" -v -I
Busque CN= en la salida, por ejemplo:
* Added example.com:443:203.0.0.0 to DNS cache
* Hostname example.com was found in DNS cache
* Trying 203.0.0.0:443...
* Connected to example.com (203.0.0.0) port 443
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384 / [blank] / UNDEF
* ALPN: server accepted h2
* Server certificate:
* subject: CN=example.com
...
Si el nombre común no coincide con el nombre de host, hay varias opciones disponibles:
- Genere e instale un certificado SSL de autofirma con el nombre común correcto, ya que Deflect no requiere un certificado SSL válido firmado por una CA de confianza en su servidor de origen.
- Solicite a Deflect que firme un certificado de origen en el panel de control en HTTPS / TLS -> Certificados de origen e instálelo en su servidor.
- Genere e instale un certificado SSL válido utilizando Lets Encrypt u otro proveedor de SSL.
4.6. Corrección temporal: Origen HTTP #
Advertencia Esta solución no es segura; sólo debe servir como medida temporal hasta que se implemente una solución permanente.
En caso de que todas las soluciones descritas anteriormente resulten infructuosas y sea necesario un periodo de depuración, el problema SNI puede evitarse obligando a Deflect a conectarse a su servidor de origen a través de HTTP.
Para activar el bypass, tiene que verificar la disponibilidad de HTTP en su servidor de origen conectándose directamente a él a través del puerto 80.
curl --resolve <domain name>:80:<origin server IP> "http://<domain name>"
Asegúrese de que el contenido se sirve correctamente en el puerto 80. Desactive cualquier redirección 301 o 302 a HTTPS para evitar el bucle de redirección.
En el panel de control de Deflect, en HTTPS / TLS -> Configuración HTTPS/TLS, active el cifrado TLS flexible.
Implicaciones de seguridad: Aunque su sitio web seguirá siendo accesible a través de HTTPS, la conexión segura sólo cubrirá el segmento que se extiende desde el navegador del visitante hasta el borde Deflect. Los datos transmitidos entre el borde de Deflect y su servidor de origen no estarán protegidos, lo que plantea riesgos potenciales.
4.7. Póngase en contacto con el servicio de asistencia de Deflect #
Solicite ayuda a nuestro equipo de asistencia de Deflect si necesita ayuda durante este proceso. Incluya mensajes de error del servidor, registros de acceso y capturas de pantalla para ayudarnos a resolver el problema más rápidamente.
