Configurar SSL auto-assinado (self-signed) no NGINX

Neste post vou explicar como criar um certificado SSL e configurar o NGINX para aceitar conexões HTTPS.

Para fazer este post estou o Raspberry PI 2 que eu tenho em casa, nele tenho instalado a ultima versão do Raspian.

Vamos considerar que o nginx já esteja instalado, vamos criar um virtual host bem simples:

~# 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 uma resposta

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

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.