
Alguém diz que o seu site não carrega e manda um código: ERR_SSL_PROTOCOL_ERROR. Para você
funciona. Para todo mundo no escritório funciona. A página que essa pessoa está vendo é cinza, tem
umas duas frases e não oferece mais nada.
Esta é a descrição que o próprio Chromium dá desse erro, no arquivo onde cada erro de rede do Chrome é definido:
An SSL protocol error occurred.
Esse é o comentário inteiro. Cinco palavras, para o erro número -107. Não é uma versão encurtada de algo mais longo; é tudo o que o navegador tem.
É o código que o Chrome usa quando não consegue ser mais específico
O que faz isso importar é o que está em volta dele na mesma lista.
Algumas linhas adiante está ERR_SSL_VERSION_OR_CIPHER_MISMATCH, o número -113, e a descrição
dele é precisa: “The client and server don’t support a common SSL protocol version or cipher
suite.” Mais adiante ainda vem uma faixa inteira para certificados, onde
ERR_CERT_COMMON_NAME_INVALID, o número -200, carrega quatro causas com nome, incluindo aquela em
que a pessoa está numa rede sem fio e está sendo redirecionada para a página de acesso da rede.
Ou seja, o Chrome tem códigos mais específicos para as falhas que consegue atribuir. Receber -107 no lugar significa que o handshake falhou de um jeito a que o navegador não soube dar nome.
Isso é o oposto de como esse erro costuma ser tratado. Todo guia sobre ele é uma lista de oito coisas para tentar, e o tamanho da lista é a pista: ninguém que escreve uma sabe qual das oito se aplica, porque o erro não diz.
O que de fato falha, e o quão pouco disso é seu
A própria página de solução de problemas da Cloudflare para esse erro lista o que eles veem por trás. O resumo deles é que o handshake falhou, e as razões que nomeiam são:
- Um problema de certificado, como um certificado que ainda não está ativo, ou um subdomínio de vários níveis que o certificado presente não cobre.
- Uma suíte de cifras que não bate, onde, nas palavras deles, clientes mais antigos podem não suportar as suítes modernas.
- HTTP/3 e QUIC bloqueados, por uma rede, um firewall ou um equipamento que não carrega QUIC sobre UDP.
- TLS 1.3 não suportado por completo por equipamentos de segurança de rede que fazem inspeção SSL.
- Interferência de rede: inspeção profunda de pacotes, proxies que interceptam, controles parentais, NAT de operadora.
Essa é a visão de um CDN a partir da própria fila de suporte e não uma taxonomia completa, e continua sendo a lista mais útil que existe, pelo jeito como se divide.
Conte de quem é cada item. O primeiro é seu. O segundo é do navegador ou do sistema operacional de quem relata. O terceiro, o quarto e o quinto são de equipamentos e software que estão entre essa pessoa e você: o roteador dela, o appliance de inspeção da empresa dela, o antivírus dela, o provedor dela.
Um de cinco está do seu lado, e o texto do erro é idêntico para todos.
E é por isso que o relato chega inútil
“Seu site está quebrado, ERR_SSL_PROTOCOL_ERROR” é uma descrição completa do que essa pessoa consegue ver e não lhe diz quase nada. A pergunta óbvia seguinte, se é só com ela, é justamente a que você não pode responder de onde está: sua máquina está em outra rede, atrás de outro hardware, com outro software de segurança, e negociando possivelmente com outro nó de borda.
É o mesmo problema de distinguir o seu bug da queda de outra pessoa, e tem a mesma propriedade: a prova que resolveria isso existe só na máquina dela e só enquanto está acontecendo.
Não é o aviso de certificado, e a diferença é grande
Se quem relata descreve uma página vermelha avisando que a conexão não é privada, com um código
começando por ERR_CERT_, esse é outro erro e bem mais tratável: esses códigos dizem o motivo
deles, e qual dos cinco é se resolve em um minuto.
ERR_SSL_PROTOCOL_ERROR não tem essa página nem esse motivo. Vale estabelecer qual dos dois ela
viu de fato antes de gastar uma tarde no errado, e o caminho mais rápido é pedir a captura em vez
da descrição.
Os dois testes que dividem o terreno
A página da Cloudflare encerra o próprio conselho dizendo para coletar dados de diagnóstico dos visitantes afetados, que é a forma honesta da resposta. Antes disso, duas coisas que quem relata pode fazer em um minuto estreitam mais do que qualquer coisa que você possa rodar.
Peça para ela tentar nos dados móveis, com o wifi desligado. Se carregar, o problema está entre a rede dela e você, e nenhuma mudança no seu servidor vai resolver para ela. Se continuar falhando, a rede dela não é a causa.
Peça para ela tentar outro navegador na mesma máquina. Se carregar ali, a causa é o navegador dela: o suporte a protocolos dele, o próprio repositório de certificados dele, ou uma extensão na frente. Se falhar nos dois, a máquina ou a rede dela está envolvida, e não o navegador.
Essas duas respostas juntas cobrem quatro das cinco causas acima e custam a essa pessoa uns
noventa segundos. O que você quer anotado ao lado: a URL completa, se foi digitado http ou
https, o código exato, o horário, e se mais alguma coisa estava falhando no mesmo minuto.
O caso que é seu e parece dela
Um padrão vale conhecer porque produz exatamente esse erro do seu lado enquanto parece um problema
do cliente. Um certificado válido mas ainda não ativo, porque a data de início está no futuro,
faz o handshake falhar em vez de produzir uma página de aviso, e falha para todo mundo com o
relógio certo. O mesmo vale para um host que está um nível abaixo do que o certificado cobre:
app.eu.example.com contra um certificado emitido para *.example.com não está coberto, porque
um curinga sozinho casa com um rótulo.
Os dois são conserto seu, os dois chegam como esse erro, e nenhum deles se distingue de um problema de equipamento intermediário sem conferir o certificado que a sua borda está servindo de verdade.
Session Replay
Extensão gratuita para Chrome. Um clique na página que está com problema captura a tela, o console e o log de rede, e entrega um link para você colar no chamado.
O que levar disso
ERR_SSL_PROTOCOL_ERROR não é um diagnóstico. É a ausência de um, e o Chromium diz exatamente
isso em cinco palavras. Trate como o navegador dizendo que um handshake falhou e que ele não
conseguiu descobrir por quê, e então ponha seu esforço nas duas perguntas que dividem as causas,
em vez de na lista de oito correções das quais sete nunca iam se aplicar.