Configurar SSL no NGINX

Neste post vou explicar como criar um certificado SSL auto-assinado e configurar o NGINX para aceitar conexões HTTPS. Utilizei um Raspberry Pi versão 2 com Raspbian para montar este exemplo.

Considerando que o NGINX já esteja instalado, vamos criar um virtual host que vai receber as conexões HTTPS:

sudo touch /etc/nginx/sites-avaliable/static.conf

Exemplo de uma configuração básica de um virtual host no NGINX

sudo vim /etc/nginx/sites-avaliable/static.conf
server {
    listen 80;
    server_name static.example.com;

    root /var/www/static.example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Ative o virtual host

ln -s /etc/nginx/sites-avaliable/static.conf /etc/nginx/sites-enable/static.conf

Reinicie o serviço

systemctl restart nginx

Pronto, agora vamos para configuração do SSL

Vamos criar um diretório para armazenar a chave e o certificado

sudo mkdir -p /etc/nginx/ssl

Para criar o certificado vou utilizar o openssl

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/static.key -out /etc/nginx/ssl/static.crt

Vamos editar o novamente o arquivo de configuração que criamos no inicio do post e adicionar as linhas abaixo

server {
    listen 80;
    server_name static.example.com;

    # SSL
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/static.crt;
    ssl_certificate_key /etc/nginx/ssl/static.key;
    ssl_protocols TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

    root /var/www/static.example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Pronto, observe que apenas os protocolos TLS 1.1 e TLS 1.2 estão ativos, a versão 1.0 TLS e o protoloco SSL 3.0 contém vulnerabilidades que foram amplamente divulgadas, fica como referência o report CVE-2014-3566. Outro item importânte é em relação a lista de ciphers, nesta configuração a encryptação usando MD5 esta desabilitada, por ser considerada fraca.

Para ativar a configuração reinicie o serviço

systemctl restart nginx

Quando o você acessar o endereço https (https://<server_name>/) você vai receber um alerta informando que o certificado não é assinado por uma certificadora (NET::ERR_CERT_AUTHORITY_INVALID), como é ambiente de teste do qual temos controle, ignore o aviso e aceite o risco.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *