Como resolver o problema de criptografia obsoleta no Chrome
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 porque 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! \o/