Eu estava com uma preguiça enorme de renovar o certificado SSL do meu blog. Quando finalmente tomei uma atitude e resolvi o problema, um amigo me mandou a imagem abaixo:
Como vocês podem ver, a mensagem diz que o site está utilizando uma criptografia obsoleta e que além disso, “inclui outros recursos não seguros”. Confesso que nunca tinha prestado atenção nisso, e provavelmente esta mensagem já estava lá antes de eu renovar meu certificado.
A solução
O segundo problema foi bem simples: depois de inspecionar o site para ver se ele está carregando algum JavaScript ou outro asset de um CDN ou coisa do tipo, descobri que, uma imagem que eu estava usando, vinha diretamente da Wikipedia. Foi só salvar essa imagem no servidor e utilizá-la para a página deixar de “incluir outros recursos não seguros”.
Já a mensagem da criptografia obsoleta levou um pouco mais de tempo, afinal, o certificado era “novinho” e eu havia optado por uma chave com 4096 bits. Além disso, me recordava de ter configurado o servidor web para não utilizar versões obsoletas do SSL (v1 e v2) e do TLS (v1.1).
É importante ressaltar aqui que tal mensagem não tem relação alguma com o preço do certificado: não importa se ele é barato ou caro. A própria mensagem deu a dica fundamental: o problema era o HMAC-SHA1. Por mais que eu ignorasse o que era o HMAC, sabia que o SHA-1 já encontrava-se obsoleto há muito tempo.
Então, a solução foi forçar o servidor a não utilizar esse algoritmo.
NGINX
Se você utiliza o Nginx, altere a opção ssl_ciphers nas configurações do seu site:
# /etc/nginx/sites-enable/default.conf server { listen 443 ssl; root /var/www/exemplo.com/; server_name exemplo.com; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA'; ssl_protocols SSLv3 TLSv1.2; ssl_prefer_server_ciphers on; ... ... ... }
Reinicie o servidor com:
# service nginx reload
Apache HTTP Server
Eu não testei, mas pelo que pesquisei, é preciso fazer algo semelhante na opção SSLCipherSuite do campo VirtualHost do arquivo /etc/apache2/sites-enable.
<VirtualHost *:443> ... SSLEngine on SSLCertificateFile /path/to/signed_certificate SSLCertificateChainFile /path/to/intermediate_certificate SSLCertificateKeyFile /path/to/private/key SSLCACertificateFile /path/to/all_ca_certs # Configuração intermediária, ajuste conforme suas necessidades SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off # On Apache 2.4+, SSLStaplingCache must be set *outside* of the VirtualHost SSLStaplingCache shmcb:/var/run/ocsp(128000) # Enable this if your want HSTS (recommended) # Header add Strict-Transport-Security "max-age=15768000" ... </VirtualHost>
Reinicie o servidor para que as mudanças tenham efeito:
service apache2 restart
Não sei por que raios os fornecedores acima não trazem essas configurações como padrão. Contudo, depois de efetuar as mudanças acima, o navegador mostra um cadeado completamente verde e sem ressalvas!