De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.

Configurando a segurança do SSL no Apache ou Nginx

Colaboração: Alexandro Silva

Data de Publicação: 06 de fevereiro de 2014

Após a divulgação de diversas falhas em algoritmos e no protocolo SSL/TLS é necessário adequar o ambiente para atender requisitos mínimos de segurança. Este artigo apresentará como configurar o HTTPS nos servidores Apache e Nginx buscando prevenir contra ataques a esse protocolo.

Todas as configurações foram testadas no Debian Wheezy 7.0.3 com Apache 2.2.22-13 e Nginx 1.2.1-2.2 e usando os navegadores Chrome,Firefox e Internet Explorer.

Utilize o comando abaixo para gerar uma chave em compliance com o Certification Authority/Browser(CA/B) Forum, onde foi definido que a partir de 1º janeiro de 2014 alguns browsers podem rejeitar certificados com chave menor que 2048 bits.

  openssl genrsa -des3 -out site.key 2048

A figura 1 mostra o teste realizado antes das configurações observe que por padrão o servidor já utiliza cifras fortes.

Figura 1: Teste de SSL padrão

Hardening Apache SSL

Ative os módulos headers e rewrite

  a2enmod headers && a2enmod rewrite

Configure o vhost de acesso HTTP forçando o redirecionamento para o HTTPS usando as seguintes linhas:

  <VirtualHost *:80>
  ...
  #Habilite o redirect para sites no mesmo dominio
  ServerSignature On
  RewriteEngine On
  RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]
  RewriteLog "/var/log/apache2/rewrite.log"
  RewriteLogLevel 2
  ...
  </VirtualHost>

Configure o vhost de acesso HTTPS adicionando as linhas referentes ao Apache SSL Hardening, todas elas estão comentadas.

  # Hardening Apache SSL
  
  #Desabilita o SSLv2 usando somente o SSLv3 e TLS 1.2 ( FIPS 140-2 standard compliance )
  SSLProtocol ALL -SSLv2
  
  #As preferencias do servidor irao prevalecer na escolha da cifra durante o SSLv3 ou TLSv1 handshake
  SSLHonorCipherOrder On
  
  #Desabilita a compressao de requisicoes SPDY e TLS (CVE-2012-4929)
  SSLCompression off
  
  #Habilita o HSTS (HTTPS Strict Transport Security) header para forcar o uso do protocolo HTTPS, permitindo tambem que o navegador do cliente relembre essa requisicao em futuras conexoes durante 6 meses.
  Header add Strict-Transport-Security "max-age=15768000"
  
  #Caso queira habilitar o HSTS para todos os subdominios
  #Strict -Transport -Security: max-age=15768000 ; includeSubDomains
  
  #Define as cifras disponiveis durante o SSL handshake compatível com os principais navegadores
  SSLCipherSuite 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS'

Após a configurar o apache é necessário reiniciá-lo para aplicar todas as modificações

  apache2ctl restart

Hardening Nginx SSL

Configure o vhost de acesso HTTP forçando o redirecionamento para o HTTPS usando o parâmetro return como no exemplo abaixo

  server {
  ...
  listen 80; ## listen for ipv4; this line is default and implied
  return 301 https://$host$request_uri;
  
  }

Configure o vhost de acesso HTTPS adicionando as linhas referentes ao NGIX SSL Hardening, todas estão comentadas.

  #As preferencias do servidor irao prevalecer na escolha da cifra durante o SSLv3 ou TLSv1 handshake.
  ssl_prefer_server_ciphers on;
  
  #Desabilita o SSLv2 e SSLv3 usando somente o TLS ( FIPS 140-2 standard compliance )
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  
  #Define as cifras disponiveis durante o SSL handshake compatível com os principais navegadores
  ssl_ciphers 'EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH+aRSA+RC4:EECDH:EDH+aRSA:RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS';
  
  #Habilita o HSTS (HTTPS Strict Transport Security) header para forcar o uso do protocolo HTTPS, permitindo tambem que o navegador do cliente relembre essa requisicao em futuras conexoes durante 6 meses.
  add_header Strict-Transport-Security "max-age=15768000";

Observação

O TLS compression vem desabilitado por padrão no Nginx

Validando

Observe os resultados obtidos após o hardening do protocolo HTTPS

Figura 2: Teste do Apache após o hardening
Figura 3: Teste do Nginx após o hardening
Figura 4: Validando as configurações de SSL na Qualys SSL Server Test

Conclusão

As configurações apresentadas previnem contra algumas das vulnerabilidades publicadas criando uma camada de segurança durante conexões seguras usando o protocolo HTTPS estando em conformidade com diversos padrões de segurança do mercado.

Conheça os serviços de diagnósticos de segurança da iBliss Segurança e Inteligência

Referências

Artigo publicado originalmente em http://www.ibliss.com.br/blog/hardening-apachenginx-ssl/

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Alexandro Silva