ERR_SSL_VERSION_OR_CIPHER_MISMATCH: causas y soluciones
ERR_SSL_VERSION_OR_CIPHER_MISMATCH significa que el navegador y el servidor completaron lo suficiente del handshake TLS como para comparar las versiones de protocolo y los cifrados admitidos, y no encontraron ningún solapamiento. Es un caso más específico que un fallo de handshake genérico: las dos partes sí hablaron, simplemente no pueden ponerse de acuerdo en cómo cifrar la conexión.
Qué significa ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Durante un handshake TLS, el ClientHello del cliente lista todas las versiones de TLS y los conjuntos de cifrado que está dispuesto a usar, y el servidor elige uno de esa lista que también admita. Este error aparece cuando la lista del servidor y la del cliente no comparten nada en absoluto, casi siempre porque el servidor solo ofrece opciones antiguas y obsoletas (TLS 1.0, TLS 1.1, o cifrados como RC4 o 3DES) que los navegadores actuales se niegan a negociar por motivos de seguridad. Los navegadores modernos llevan años retirando el soporte de esas opciones antiguas, así que un servidor que nunca actualizó su configuración TLS falla cada vez más de esta forma frente a visitantes normales y actualizados.
Cómo aparece el error
Chrome y Edge muestran "This page isn't working - example.com sent an invalid response" o, más específicamente, "ERR_SSL_VERSION_OR_CIPHER_MISMATCH". Firefox suele mostrar "Secure Connection Failed" con el código SSL_ERROR_NO_CYPHER_OVERLAP, que nombra el problema directamente.
openssl s_client forzando una versión concreta de TLS muestra exactamente qué versiones acepta y rechaza el servidor:
openssl s_client -connect example.com:443 -tls1_2
CONNECTED(00000003)
...
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Verify return code: 0 (ok)
openssl s_client -connect example.com:443 -tls1
CONNECTED(00000003)
140... error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Una alerta de "protocol version" o "handshake failure" en una versión y una conexión limpia en otra señalan con precisión qué versiones admite el servidor. El script SSL de nmap va más allá y lista de una vez todos los cifrados que ofrece el servidor:
nmap --script ssl-enum-ciphers -p 443 example.com
| ssl-enum-ciphers:
| TLSv1.0:
| ciphers:
| TLS_RSA_WITH_RC4_128_SHA - C
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - A
Qué causa ERR_SSL_VERSION_OR_CIPHER_MISMATCH
- El servidor solo ofrece TLS 1.0 o 1.1. Los navegadores principales retiraron el soporte por defecto de ambas versiones hace años; un servidor que nunca actualizó su configuración ya no comparte ninguna versión de protocolo común con un navegador actual.
- El servidor solo ofrece cifrados débiles u obsoletos, como RC4 o 3DES, que los navegadores se niegan a negociar sea cual sea la versión de TLS que se ofrezca junto a ellos.
- Un desajuste de certificado o de SNI en hosting compartido. Cuando varios sitios comparten una dirección IP y el servidor no logra hacer coincidir el nombre de host solicitado (Server Name Indication) con el certificado y la configuración de cifrado correctos, puede fallar el handshake en lugar de caer de vuelta correctamente.
- El estado de Cloudflare "no SSL certificate for this hostname yet", que aparece cuando se añadió un dominio a Cloudflare y el DNS se apuntó hacia allí antes de que terminara la emisión del certificado; el borde todavía no tiene nada válido con lo que negociar para ese nombre de host.
- Un sistema operativo o navegador antiguo que en sí mismo solo admite versiones de TLS o cifrados antiguos, y se topa con un servidor moderno que los ha desactivado (correctamente).
Cómo saber de quién es la culpa
Prueba primero desde otro dispositivo o desde otra red; si el sitio carga ahí, el sistema operativo o el navegador del propio visitante están desactualizados. Si falla en todas partes, incluso desde un navegador actual y totalmente actualizado, la causa es la configuración TLS del servidor. Una comprobación SSL ejecutada desde varias ubicaciones reporta en una sola pasada las versiones de protocolo y los cifrados exactos que ofrece el servidor desde cada punto de vista, lo que es más rápido que repetir los comandos de openssl a mano desde redes distintas.
Cómo corregir ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Si eres el visitante
- Actualiza tu navegador a la última versión; esto resuelve de inmediato la variante del desajuste del lado del cliente.
- Actualiza tu sistema operativo, especialmente en Windows 7 o anteriores, o en versiones muy antiguas de Android e iOS, donde la propia librería TLS del sistema puede estar desactualizada al margen del navegador.
- Prueba con otro dispositivo o red para confirmar si el problema te sigue a ti o se queda con el sitio.
- Contacta con el propietario del sitio si el fallo es constante en todos los sitios donde lo pruebas; una configuración de servidor desactualizada tiene que arreglarse en ese extremo, no sortearse desde el navegador.
Si administras el sitio
- Fija versiones de protocolo y cifrados modernos de forma explícita. En nginx:
Elimina por completo TLS 1.0, TLS 1.1, y cualquier entrada de cifrado RC4 o 3DES, en lugar de limitarte a despriorizarlas.ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_cipher off; - Si un cliente heredado realmente todavía necesita TLS 1.0 o 1.1 (algunos terminales de pago antiguos o dispositivos embebidos sí lo necesitan), sírvelo desde un nombre de host o un listener aparte con su propio riesgo asumido, en lugar de debilitar la configuración del sitio principal para todos los visitantes.
- Revisa la configuración de SNI en hosting compartido o en un proxy inverso que gestione varios certificados, confirmando que cada bloque
server_namemapea al certificado correcto y que el proxy no cae de vuelta a un certificado por defecto que ofrezca un conjunto de cifrados distinto e incompatible. - Si usas Cloudflare y esto acaba de empezar tras añadir el dominio, revisa SSL/TLS > Edge Certificates en el panel para ver el estado de emisión del certificado; el estado "no SSL certificate for this hostname yet" se resuelve solo en cuanto termina la emisión, normalmente entre minutos y unas pocas horas.
- Recarga después de cualquier cambio, y vuelve a verificar:
nginx -t && systemctl reload nginx, y luego ejecuta de nuevo los comandos de nmap u openssl de arriba para confirmar que las versiones y cifrados antiguos realmente han desaparecido, no que solo se han reordenado.
Errores relacionados
- ERR_SSL_PROTOCOL_ERROR es el fallo de handshake más amplio y menos específico: una respuesta que no es TLS en el puerto, datos de handshake mal formados, o software de interceptación, en lugar de una comparación limpia de versión/cifrado que simplemente no encontró solapamiento.
- ERR_CERT_DATE_INVALID ocurre después de recibir y leer realmente un certificado, un paso más tarde que este error, que nunca llega tan lejos.
Cómo prevenir ERR_SSL_VERSION_OR_CIPHER_MISMATCH
Los fabricantes de navegadores retiran periódicamente el soporte de versiones de TLS y cifrados antiguos según su propio calendario, lo que significa que una configuración de servidor que funcionaba bien el año pasado puede empezar a fallar para una porción creciente de visitantes sin ningún cambio en absoluto del lado del servidor. Una comprobación de certificado y SSL reporta el protocolo y el cifrado negociados en cada ejecución, desde más de 300 puntos de control en 158 ciudades, detectando un servidor que ha derivado hacia una configuración obsoleta antes de que afecte al tráfico real. HostTracker alerta por correo, SMS, llamada de voz, Slack, Telegram y más en el momento en que falla una comprobación.
Preguntas frecuentes
¿Es esto lo mismo que un error de certificado caducado?
No. Este error ocurre durante la negociación de protocolo y cifrado, antes de que se evalúe siquiera el propio certificado. Un certificado caducado sería un error distinto que ocurre un paso más tarde en el handshake.
¿Por qué esto solo afecta a visitantes con ordenadores antiguos?
Porque un sistema operativo o navegador desactualizado puede admitir solo TLS 1.0, TLS 1.1, o cifrados más antiguos, que un servidor moderno correctamente reforzado ya no ofrece, produciendo un desajuste limpio de versión/cifrado específico de ese cliente desactualizado.
¿Debería reactivar TLS 1.0 para arreglar esto a los visitantes antiguos?
En general, no. TLS 1.0 y 1.1 tienen debilidades conocidas y la mayoría de los navegadores actuales no los usarán de todos modos, así que reactivarlos principalmente añade riesgo sin restaurar la compatibilidad para la mayoría de los visitantes afectados, cuyo problema real es un navegador o sistema operativo desactualizado.
¿Qué significa exactamente el mensaje de Cloudflare "no SSL certificate for this hostname yet"?
Significa que el DNS del dominio ya apunta a Cloudflare pero la emisión del certificado para ese nombre de host todavía no ha terminado, así que el borde de Cloudflare todavía no tiene nada válido que presentar durante el handshake. Normalmente se resuelve solo en cuanto termina la emisión.
¿Cómo sé qué cifrados ofrece actualmente mi servidor sin tener que adivinar?
Ejecuta nmap --script ssl-enum-ciphers -p 443 yourdomain.com, que lista todas las versiones de protocolo y cifrados que acepta el servidor junto con una nota para cada uno, en lugar de probar las versiones una a una.