
A Let’s Encrypt é uma autoridade de certificação que oferece uma forma simples de obter e instalar certificados TLS/SSL gratuitos, o que permite cifrar os pedidos HTTPS nos teus servidores web. Simplifica o processo com um programa chamado Certbot, que tenta automatizar a maior parte das etapas necessárias. Convém saber que a Google, com o seu browser Chrome, quer avisar todos os utilizadores sobre os sites não seguros, o que pode ter impacto no teu posicionamento.
Neste tutorial vou mostrar-te como usar o Let’s Encrypt para obter um certificado SSL gratuito para o Nginx em Ubuntu 14.04. Mostro também como renovar automaticamente o certificado (um certificado Let’s Encrypt só é válido durante 90 dias!).
Passo 1, Instalar o Certbot
O que é o Certbot? O Certbot ativa automaticamente o HTTPS no teu site, instalando os certificados Let’s Encrypt. Se não usas Nginx ou Ubuntu 14.04, dá uma vista de olhos no site deles, onde é explicado o procedimento a seguir em cada sistema para gerar certificados SSL com o Let’s Encrypt.
Vamos começar por descarregar o Certbot para a pasta /usr/local/sbin:
cd /usr/local/sbin
wget https://dl.eff.org/certbot-autoNão te esqueças de tornar o ficheiro executável:
chmod a+x /usr/local/sbin/certbot-autoPasso 2, Obter um certificado
Para garantir que o diretório fica acessível ao Certbot, vamos alterar rapidamente a configuração do Nginx. Por omissão, está em /etc/nginx/sites-available/default. Aqui uso o nano para a editar, mas podes usar o editor que quiseres:
nano /etc/nginx/sites-available/defaultDentro do bloco server, acrescenta:
server {
#votre configuration ...
location ~ /.well-known {
allow all;
}
}Vais precisar da pasta pública do teu site. Se usares o ficheiro de configuração predefinido, a pasta pública é /usr/share/nginx/html, se usares Laravel, /path/to/public/.
Confirma que não há erros.
nginx -tSe estiver tudo bem, reinicia o Nginx:
service nginx restartPasso 3, Configurar TLS/SSL no servidor nginx
Agora que sabemos qual é o caminho público, podemos usar o plugin Webroot para pedir um certificado SSL. Aqui indicamos também os nomes de domínio com a opção -d. Se quiseres que um certificado funcione com vários domínios (por exemplo, exemplo.com e www.exemplo.com), não te esqueças de os incluir todos, a começar pelo domínio de nível mais alto (neste caso, exemplo.com). Garante ainda que substituis as partes destacadas pelo caminho webroot correto e pelos teus nomes de domínio:
certbot-auto certonly -a webroot --webroot-path=/votre/chemin/public -d exemple.com -d www.exemple.comO Certbot vai fazer-te várias perguntas, entre elas o teu endereço de email, que serve para te avisar quando o certificado estiver quase a expirar, mais à frente vemos como renová-lo automaticamente.
Os certificados
Depois de obteres o certificado, ficas com os seguintes ficheiros:
- cert.pem: o certificado do teu domínio
- chain.pem: o certificado da Let’s Encrypt
- fullchain.pem: o cert.pem e o chain.pem juntos
- privkey.pem: a chave privada do certificado.
Estes ficheiros ficam num subdiretório de /etc/letsencrypt/archive. No entanto, o cliente Let’s Encrypt cria ligações simbólicas para os certificados mais recentes no diretório /etc/letsencrypt/live/votre_nom_de_domaine. Como as ligações apontam sempre para os certificados mais recentes, é este o caminho que deves usar para referenciar o certificado em vigor.
Gerar uma chave Diffie-Hellman
Para reforçar ainda mais a segurança, deves também gerar uma chave Diffie-Hellman de 2048 bits:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048Demora alguns minutos, mas no fim ficas com o teu ficheiro DH em /etc/ssl/certs/dhparam.pem.
Agora que já tens o certificado SSL, falta configurar o servidor Nginx para o usar.
Vamos começar por voltar a editar o bloco server:
nano /etc/nginx/sites-available/defaultApagamos (ou comentamos) as linhas seguintes, que servem para escutar o porto 80 dos pedidos HTTP:
#listen 80 default_server;
#listen [::]:80 default_server ipv6only=on;Para passar a escutar o porto 443, do HTTPS:
listen 443 ssl;Acrescentamos também ao bloco server a ligação simbólica que criámos e que aponta para os certificados gerados com o comando certbot-auto:
ssl_certificate /etc/letsencrypt/live/exemple.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/exemple.com/privkey.pem;Juntamos a configuração SSL predefinida do servidor:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_prefer_server_ciphers on;
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:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;Por fim, fora do bloco server principal, acrescenta este novo bloco para redirecionar o HTTP (porto 80) para HTTPS (porto 443).
server {
listen 80;
listen [::]:80;
server_name exemple.com www.exemple.com;
return 301 https://$host$request_uri;
}Verifica se há erros na configuração:
nginx -tDepois reinicia o servidor nginx:
service nginx restartPasso 4, Renovação automática do certificado
Como disse no início do artigo, os certificados SSL expiram ao fim de 90 dias, por isso é preciso renová-los, e, se nos esquecermos, chega um email antes de o certificado Let’s Encrypt expirar.
Para o renovar automaticamente, acrescentamos o comando certbot-auto renew às tarefas CRON do servidor.
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reloadTodas as segundas-feiras, às 2h30, o certificado é renovado e, às 2h35, o servidor nginx é recarregado.
Conclusão
Já tens o teu servidor web com um certificado SSL reconhecido, emitido pela Let’s Encrypt! É uma boa alternativa aos certificados pagos. Muitos alojamentos, como a OVH, oferecem SSL gratuito graças ao Let’s Encrypt. E é interessante saber que a Google vai empurrando, aos poucos, todos os sites para HTTPS.
fonte: digitalocean.com & wikipedia.org
···


