Guia · 3 min de leitura

Meu certificado SSL está configurado corretamente?

Resposta curta: está configurado corretamente quando o certificado é confiável (cadeia completa), cobre todos os nomes que você usa (com e sem www), renova automaticamente bem antes de vencer, só TLS 1.2 e 1.3 estão ativados, toda requisição http:// redireciona para https:// e o HSTS está definido. O cadeado sozinho só prova o primeiro ponto.

Atualizado em · HackGrade

Passos rápidos

  1. Confira se a cadeia é confiável. Abra o site em uma janela anônima no celular e no computador; nenhum aviso deve aparecer.
  2. Confira os nomes. O certificado precisa listar seudominio.com e www.seudominio.com se você usa os dois.
  3. Confira a validade e a renovação. Leia o notAfter e teste se a renovação automática funciona.
  4. Confira as versões de TLS. Permita só TLS 1.2 e TLS 1.3.
  5. Confira o redirecionamento. http:// precisa redirecionar de forma permanente para https://.
  6. Confira o HSTS. Envie Strict-Transport-Security quando o HTTPS funcionar em tudo.

O código e a configuração ficam em inglês.

1. Uma cadeia completa e confiável

O servidor também precisa enviar o certificado intermediário. Sem ele, o site muitas vezes funciona em navegadores de computador, mas falha em celulares e clientes de API.

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -showcerts </dev/null 2>/dev/null | grep -E 's:|i:|Verify return'

Procure Verify return code: 0 (ok). No nginx, ssl_certificate deve apontar para o arquivo de cadeia completa (no Let’s Encrypt: fullchain.pem, não cert.pem).

2. Todos os nomes estão cobertos

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
  | openssl x509 -noout -ext subjectAltName

3. Validade e renovação automática

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
  | openssl x509 -noout -enddate
sudo certbot renew --dry-run   # if you use certbot

O HackGrade marca um certificado como risco médio quando faltam menos de 21 dias para vencer, alto com menos de 14 dias, e crítico quando já venceu ou não é confiável.

4. Só TLS 1.2 e 1.3

nginx
ssl_protocols TLSv1.2 TLSv1.3;
Apache
SSLProtocol -all +TLSv1.2 +TLSv1.3

Teste se uma versão antiga é recusada (o comando deve falhar ao conectar):

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -tls1_1 </dev/null

5. HTTP redireciona para HTTPS

nginx
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}
.htaccess
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

6. HSTS

Quando todas as páginas e subdomínios funcionarem em HTTPS, adicione Strict-Transport-Security. Leia antes o guia de HSTS (em inglês): comece com um max-age curto e vá aumentando. Depois corrija qualquer conteúdo misto (em inglês).

Perguntas frequentes

Um certificado gratuito (Let’s Encrypt) é menos seguro que um pago?

Não. A criptografia é a mesma. Certificados pagos diferem no tipo de validação, no suporte e na garantia, não na qualidade da criptografia.

Por que meu site mostra um aviso só em alguns celulares?

Geralmente por falta do certificado intermediário. Configure o servidor com o arquivo de cadeia completa.

Ainda devo dar suporte ao TLS 1.0 ou 1.1?

Não. Os dois foram descontinuados (RFC 8996) e os navegadores modernos removeram o suporte a eles.

Fontes

Guias relacionados

Grátis · Na hora · Sem cadastro

Descubra sua nota antes que outra pessoa descubra.

Análise passiva. Nada é atacado sem a sua permissão.

Comece grátis. Planos pagos a partir de US$ 12 por mês, ou um relatório avulso por US$ 29. Ver preços