Mensaje de error
SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
También se muestra como
- error:0A00042E:SSL routines::tlsv1 alert protocol version
- SSL alert number 70
Tanto OpenSSL 3.0 como 3.5 imprimen «error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:<source>:SSL alert number 70»; OpenSSL 1.1.1 usaba el código 1409442E. Los clientes basados en OpenSSL (curl, Python, Ruby, PHP) muestran el mismo texto del motivo.
OpenSSL (client side) — TLS alert 70 (protocol_version) received from the server
Qué significa
El cliente recibió del servidor la alerta TLS 70 (protocol_version): ninguna de las versiones de protocolo que ofreció el cliente es aceptable para el servidor. «tlsv1» es solo el nombre de familia que OpenSSL usa para las alertas definidas desde TLS 1.0. En la práctica, el servidor está limitado a TLS 1.0/1.1 mientras el cliente ofrece 1.2 y 1.3, o el cliente se restringió a versiones que el servidor tiene desactivadas.
Por qué ocurre
El servidor solo admite TLS 1.0 o 1.1
frecuenteEquipos heredados, servidores antiguos de Windows/IIS o Java y dispositivos que nunca se actualizaron.
Se indicó al cliente que usara una versión antigua
ocasionalOpciones como -tls1 o un ajuste MaxProtocol olvidado en una configuración hacen que el cliente ofrezca versiones que los servidores actuales rechazan.
Un servidor solo TLS 1.3 y un cliente limitado a 1.2
ocasionalLos endpoints reforzados a veces solo aceptan TLS 1.3; los clientes antiguos no pueden conectarse.
Cómo solucionarlo
- 1.
Encontrar las versiones que acepta el servidor
Prueba cada versión explícitamente (el nivel de seguridad 0 permite los handshakes basados en SHA-1 de TLS 1.0/1.1 solo para esta prueba).
bash for v in tls1 tls1_1 tls1_2 tls1_3; do printf '%-7s ' "$v" echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -"$v" \ -cipher 'DEFAULT:@SECLEVEL=0' >/dev/null 2>&1 && echo accepted || echo refused done - 2.
Habilitar TLS 1.2 y 1.3 en el servidor
Actualiza la configuración de protocolos del servidor (y su biblioteca TLS si es anterior a TLS 1.2).
text # nginx ssl_protocols TLSv1.2 TLSv1.3; # Apache httpd SSLProtocol -all +TLSv1.2 +TLSv1.3