Arquivo da tag: Https

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.

[Dica Rápida] Redirecionando HTTPS para HTTP

Hoje tive que fazer uma regra utilizando o mod_rewrite do apache para redirecionar requisições HTTPS (TCP 443)  para HTTP (TCP 80), o meu ambiente já estava com as configuração de SSL e esta regra foi aplicada no arquivo de configuração do virtual host no apache, mais nada impede que a regra de reescrita/redirecionamento seja aplicada no arquivo .htaccess dentro do document root na sua área com SSL:

 RewriteEngine on
 RewriteCond %{SERVER_PORT} ^443$ [OR]
 RewriteCond %{HTTPS} =on
 RewriteRule ^(.*)$ http://blog.gorobei.net/$1 [R=301,L]

Após aplicar regra reinicie o apache.

Neste exemplo, apliquei regra no arquivo de configuração do virtual host que corresponde a url https://blog.gorobei.net que após aplicação da regra vai fazer um redirecionamento permanente (301) para a URL http://blog.gorobei.net.

Bom é isso ai pessoal, até a próxima 🙂