O dia em que a renovação do certificado falha
O certificado renova-se sozinho durante dois anos. Depois falha num sábado, e descobre-se porque alguém não conseguiu abrir o site — não porque algum aviso tenha chegado.
A renovação automática é uma tarefa agendada cuja saída ninguém lê. Funciona enquanto funciona, e o silêncio é igual nos dois casos.
1. As três coisas que falham
O desafio não chega. A autoridade precisa de alcançar o servidor para confirmar que o domínio é dele. Uma regra de firewall nova, uma mudança no proxy ou um porto fechado bastam.
O DNS mudou. O nome passou a apontar para outro sítio, e a validação acontece onde o nome responde — não onde está o servidor que pediu.
Limites de tentativas. Depois de várias falhas seguidas, a autoridade começa a recusar pedidos durante horas. A causa inicial pode já estar corrigida e a renovação continua a falhar, o que manda investigar o problema errado.
2. A armadilha do reencaminhamento
É a causa mais comum e a mais irónica: forçar todo o tráfego de HTTP para HTTPS parte a validação, porque o desafio é servido em HTTP, num caminho conhecido.
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}Aquele caminho tem de ficar de fora do reencaminhamento. E o modo como isto se descobre é quase sempre o mesmo: a renovação corre durante meses, alguém endurece a configuração de HTTPS, e a conta só aparece noventa dias depois — tempo suficiente para ninguém ligar as duas coisas.
3. O HSTS, que transforma um incómodo numa paragem
Esta é a parte que vale o artigo. Um certificado expirado, por si, dá um aviso no browser com um botão para continuar. Desagradável, e passável.
Com Strict-Transport-Security, não há botão. O browser prometeu nunca falar com aquele domínio sem TLS válido, e cumpre: quem já visitou o site antes não tem como entrar. Para esses, o site não está com um aviso — está inacessível.
Com includeSubDomains alastra aos subdomínios, e com preload fica embutido nos próprios browsers, de onde sair leva meses. É um cabeçalho que se liga com a certeza de que a renovação funciona, não antes.
E há uma decisão de arquitetura por trás disto que vale explicar. Neste site o HSTS não é emitido pela aplicação, de propósito: quem termina o TLS é o proxy, e é lá que ele deve ser ligado. Emitido pela aplicação, sobreviveria a uma reconfiguração do proxy que o devia ter desligado — e passaria a haver um cabeçalho crítico cuja origem ninguém se lembra.
Um cabeçalho destes pertence à camada que termina a ligação. É a mesma razão por que o proxy é o sítio certo para os cabeçalhos que faltam à aplicação.
4. O que avisa, e o que não
A autoridade envia correio quando o certificado está a chegar ao fim — para o endereço registado na conta. É um endereço escrito uma vez, há três anos, e que às vezes já não é lido por ninguém. Confirmar que ainda funciona é um minuto, e é a diferença entre haver aviso e não haver.
A monitorização não avisa sozinha: tem de se lhe pedir. E é uma das duas coisas previsíveis com dias de antecedência, como no artigo da monitorização mínima — o que faz dela um dos avisos mais fáceis de montar e mais raros de encontrar montados.
5. O mínimo que resolve
Aviso aos 30 dias, não aos dois. Trinta dias são tempo para investigar sem pressa; dois são um fim de semana estragado.
Verificação de fora, que é a única que vê o certificado que o público vê — e não o que está no disco.
Vigiar o código de saída da renovação, e não os seus registos. Um registo com «erro» a meio pode ter corrido bem; um código diferente de zero é inequívoco.
Um ensaio periódico da renovação, em modo de teste, cujo resultado chegue a alguém.
O resumo
A renovação falha pelo desafio que não chega, pelo DNS que mudou, ou pelos limites depois de a primeira falha passar despercebida. O reencaminhamento para HTTPS é a causa favorita, e tem de deixar o caminho do desafio de fora. O HSTS tira o botão de continuar, e por isso liga-se depois de a renovação estar comprovada — e no proxy, que é quem termina o TLS. O resto é um aviso aos trinta dias e um endereço de correio que ainda funcione.