Mensagem de erro
SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Também aparece como
- error:0A00042E:SSL routines::tlsv1 alert protocol version
- SSL alert number 70
O OpenSSL 3.0 e o 3.5 imprimem “error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:<source>:SSL alert number 70”; o OpenSSL 1.1.1 usava o código 1409442E. Clientes baseados no OpenSSL (curl, Python, Ruby, PHP) mostram o mesmo texto de motivo.
OpenSSL (client side) — TLS alert 70 (protocol_version) received from the server
O que significa
O cliente recebeu do servidor o alerta TLS 70 (protocol_version): nenhuma das versões do protocolo que o cliente ofereceu é aceitável para o servidor. O prefixo “tlsv1” é só o nome de família que o OpenSSL usa para os alertas definidos desde o TLS 1.0. Na prática, o servidor está limitado ao TLS 1.0/1.1 enquanto o cliente oferece 1.2 e 1.3, ou o cliente foi restrito a versões que o servidor desativou.
Por que acontece
O servidor só oferece suporte a TLS 1.0 ou 1.1
comumEquipamentos legados, servidores Windows/IIS ou Java antigos e dispositivos que nunca foram atualizados.
O cliente foi instruído a usar uma versão antiga
ocasionalOpções como -tls1 ou uma diretiva MaxProtocol esquecida na configuração fazem o cliente oferecer versões que os servidores atuais recusam.
Um servidor só com TLS 1.3 e um cliente limitado ao 1.2
ocasionalEndpoints com configuração reforçada às vezes aceitam apenas TLS 1.3; clientes antigos não conseguem se conectar.
Como corrigir
- 1.
Descobrir quais versões o servidor aceita
Teste cada versão explicitamente (o nível de segurança 0 permite os handshakes do TLS 1.0/1.1 baseados em SHA-1, só para este teste).
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.
Ativar TLS 1.2 e 1.3 no servidor
Atualize as configurações de protocolo do servidor (e a biblioteca TLS dele, se ela for anterior ao TLS 1.2).
text # nginx ssl_protocols TLSv1.2 TLSv1.3; # Apache httpd SSLProtocol -all +TLSv1.2 +TLSv1.3