DevSecOpsARTIGO

Como resolver o problema de criptografia obsoleta no Chrome

Estava com preguiça de renovar o certificado SSL do meu blog. Quando finalmente resolvi o problema, um amigo me mandou uma imagem que complicou as coisas…

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:

cifra_antiga

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 JavaScriptJavaScript116 conteúdosJavaScript em 2020: O que esperarDev (Back & Front) · jan 2020Campos públicos e privados em classes JavaScript – O que vem por aí no ESNextDev (Back & Front) · abr 201929 anos de JavaScript!Dev (Back & Front) · jan 2025Ver tudo em Dev (Back & Front) 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!

cifra_nova

Formado pela Escola de Comunicações e Artes da USP, é membro ativo da comunidade de software livre brasileira e um defensor das causas ligadas à inclusão digital e ao conhecimento livre. No campo profissional, já coordenou projetos de educação e inclusão em entidades do terceiro setor e foi editor chefe da Linux Magazine e da revista iMasters, tendo palestrado nos mais diversos eventos da área de tecnologia. Nos últimos anos, tem se dedicado a pesquisar o universo da cultura digital e seus desdobramentos.

Ver perfil