A Let’s Encrypt é uma Autoridade Certificadora (CA) que emite certificados SSL gratuitamente, permitindo que você habilite o uso de HTTPS (HTTP over TLS) no seu site. Um dos objetivos do projeto é tornar a web um lugar mais seguro.
Criada pelo grupo de pesquisa Internet Security Research Group (ISRG), a Let’s Encrypt está sendo patrocinada por gigantes da área de tecnologia, dentre elas: Mozilla, Facebook, Cisco, Akamai, Automattic, entre outras.
Ao habilitar um certificado SSL no seu site, além de torná-lo mais seguro, você melhora o posicionamento dele junto ao Google, tendo em vista que no ano passado a empresa sinalizou que o uso de HTTPS é um dos fatores considerados na elaboração do seu ranking.
Atualmente o projeto se encontra na fase de testes (public beta). Entretanto, ele já está funcionando adequadamente, como vocês podem observar no certificado SSL que tenho habilitado aqui no blog 🙂
Sem mais delongas, para a criação de um certificado são necessários quatro três passos: clonar o repositório da Let’s Encrypt, executar uma linha de comando para gerar o certificado do seu domínio, criar um arquivo de confirmação no seu servidor web e, por fim, habilitar o certificado SSL no seu servidor web.
1. Clonando o repositório da Let’s Encrypt
Use os comandos abaixo para clonar o repositório no seu servidor web e entrar no diretório aonde ele foi baixado.
$ git clone https://github.com/certbot/certbot
$ cd certbot
2. Executando a linha de comando para gerar seu certificado
De acordo com o manual, é possível gerar e instalar um certificado SSL automaticamente usando o seguinte comando:
$ sudo ./certbot-auto
No entanto, confesso que não cheguei a testar dessa forma.
Como tenho preferência por gerar o certificado manualmente para então habilitá-lo no servidor web, utilizei o seguinte comando:
$ sudo ./certbot-auto certonly --webroot -w /var/www/tiagohillebrandt.eti.br -d tiagohillebrandt.eti.br -d www.tiagohillebrandt.eti.br
Você pode adicionar vários domínios no mesmo SSL (UCC) usando o parâmetro -d.
Ao executar esse comando, perceba que inicialmente ele vai instalar alguns softwares no seu servidor (dependências), depois irá solicitar seu endereço de e-mail bem como o aceite dos termos do serviço e, por fim, irá gerar o certificado SSL, que será disponibilizado no seguinte diretório:
/etc/letsencrypt/live/tiagohillebrandt.eti.br/
Esse certificado terá validade de três meses. Depois disso será necessário renová-lo.
3. Habilitando o certificado SSL no seu servidor web
Para habilitar no seu NGINX, adicione as seguintes linhas no contexto server do arquivo de configuração do seu site:
listen 443 ssl; ssl on; ssl_certificate /etc/letsencrypt/live/tiagohillebrandt.eti.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tiagohillebrandt.eti.br/privkey.pem;
Feito isso, basta reiniciar o seu NGINX.
Já para habilitar no Apache, basta usar diretivas equivalentes.
Extra. Habilitando o HTTP/2 com OCSP stapling e cache de sessão no NGINX 1.9.5+
Se você está usando o NGINX 1.9.5 ou superior, pode querer habilitar o HTTP/2, que tem uma performance muito melhor do que o HTTP/1.1.
Além disso, o OCSP stapling e o cache de sessão ajudam a melhorar ainda mais a performance das suas requisições HTTPS.
listen 443 ssl http2;
ssl on; ssl_certificate /etc/letsencrypt/live/tiagohillebrandt.eti.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tiagohillebrandt.eti.br/privkey.pem;
ssl_stapling on; ssl_stapling_verify on;
ssl_session_cache shared:SSL:20m; ssl_session_timeout 10m;
Feito isso, basta reiniciar o NGINX.
Se você quer entender um pouco mais sobre HTTP/2 e performance em geral, recomendo que confira os slides da minha apresentação sobre desempenho de servidores na WordCamp São Paulo 2015.
Cadê o cadeado verde?
Ao acessar um site HTTPS, um cadeado verde deve ser exibido na barra de endereços do seu navegador. O cadeado verde significa que o certificado SSL é válido e, além disso, que todos os elementos dentro daquela página estão sendo carregados por meio de uma conexão segura.
Portanto, se você acessar seu site via HTTPS e ele não estiver exibindo esse cadeado, você pode utilizar este site para descobrir qual é o problema: https://www.whynopadlock.com/
E é isso galera! Qualquer dúvida, sugestão ou xingamento, só jogar nos comentários 🙂 Abraço!
Ranieri says
Bem legal a iniciativa de fornecer certificados de graça… o único problema fica por conta do prazo de validade… 3 meses é muito pouco… tinha que ver pelo menos de 1 ano.
Tiago Hillebrandt says
Pois é Ranieri, também achei.
Entretanto, pelo que vi na documentação tem uma linha que você pode adicionar ao crontab para renovar a cada três meses automaticamente.
Não é a melhor solução, mas é melhor do que refazer o processo manualmente a cada três meses, haha.
Luan says
Olá Thiago!
Parabéns pelo post. Só tenho uma dúvida, posso aplicar isso de alguma forma em um servidor compartilhado, no caso de uma hospedagem comum em de sites em serviços como a KingHost, Godaddy, Locaweb, etc.?
Tiago Hillebrandt says
Olá Luan,
Pra ser sincero não sei como funciona a política para instalação de certificados SSL nesses servidores compartilhados das empresas que citou, mas tecnicamente falando é um certificado como qualquer outro, portanto é possível sim. Basta adicionar as diretivas no seu servidor web apontando para os arquivos “fullchain.pem” (certificado + intermediários) e “privkey.pem” (chave privada).
Abraços!
Marco Antonio Walter says
Boa tarde Luan, eu possuo hospedagem na Locaweb , e para utilizar este certificado, você deverá pagar na sua hospedagem por um ip adicional.
Efetuei a minha aquisição hoje , e após este procedimento, ligue para o suporte da locaweb, e solicite acesso ao root para poder instalar o certificado.
Fica aí a dica para quem tem hospedagem com ip compartilhada.
Att
Marco A Walter
Cadu de Castro Alves says
Tiago, no caso de sites que façam vendas online, esse certificado pode ser usado? Qual a diferença dele para um certificado pago?
Fábio Berbert de Paula says
Pode sim. A diferença é somente essa, um é gratuito e o outro é pago 🙂
beyraq says
uma dúvida, o certificado checando no site indicado deu ok, mas o site não abre, nginx, o que falta? abre http://barbarascenas.com e não abre https://barbarascenas.com pode acontecer do com http não abrir, pois estou configurando o servidor em determinadas horas, mas coisa de 5 minutos, só reboot da máquina…
Fábio Berbert de Paula says
Muito bom cara! Finalmente terei certificado no meu site. Eu precisava de certificado para 3 sub-domínios, no caso seria um certificado wildcard, que é caro demais.. O StartSSL fornece certificado grátis, mas só para um sub-domínio.
Com o Let’s Encrypt meus problemas vão acabar!
Obrigado por compartilhar a dica.
Michel Wilhelm says
Excelente artigo Tiago, mas tenho a acrescentar algo: no meu caso, ao executar o comando para gerar o certificado, deu erro, pois precisava ser visto pela entidade certificadora um arquivo temporário que estivesse disponivel online, então executei o seguinte (para uma instalação WordPress)
sudo letsencrypt certonly –webroot -w /var/www/webiste/ -d http://www.website.com -d website.com
Claudinei says
Olha tentei fazer a instalação mas após baixar no server ao digitar o comando
cd letsencrypt
Retorna a seguinte mensagen >> -bash: cd: letsencrypt: Not a directory
O estranho que vejo ele no diretório com nome >> letsencrypt
O segundo comando >> cd letsencrypt << não reconhece, será que o comando esta certo?
Estevão Baldoni says
Tiago,
Parabéns pelo tutorial.
Estou com um problema, ao executar o comando ./letsencrypt-auto certonly ele da erro de DNS.
IMPORTANT NOTES:
– The following errors were reported by the server:
Domain: http://www.estevaobaldoni.com.br
Type: connection
Detail: DNS problem: NXDOMAIN looking up A for
O meu domínio precisa estar em algum servidor DNS? na teoria eu adicionando no hosts da máquina teria que funcionar, mas não funcionou.. tem alguma idéia?
Segue abaixo mais um tutorial e o scripto que faz a verificação de validação automatica.
https://eblog.damia.net/2015/12/03/lets-encrypt-automation-on-debian/
Deyvson says
também deu o mesmo erro o meu certificado. Como resolveu?
Claudio says
O amigo
Da pra usar esse certificado no meu hotsppot?
Nem todos clientes sabem onde clicar para passar da pagina de aviso.
Aislan says
Amigo precisa de algum pre requisito no server…
Quando eu executo a linha de comando dá essa mensagem;
“W: GPG error: http://repo.ajenti.org main InRelease: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY BDC3FBAA53029759
E: Problem executing scripts APT::Update::Post-Invoke-Success ‘test -x /usr/bin/apt-show-versions || exit 0 ; apt-show-versions -i’
E: Sub-process returned an error code”
luiz henrique says
Eu não tenho servidor dedicado nem vps, apenas queria gerar um certificado para um site que fiz, há possibilidade de fazer por outras vias?
Victor Soares says
Olá Pessoal,
Eu possuo meu site no servidor Linux, hospedado na Locaweb, onde eu insiro aquele primeiro código:
$ git clone https://github.com/certbot/certbot
$ cd certbot
Gerencio meu banco por meio do Filezilla, é por lá que eu devo executar esses comandos? Se sim, sabe me informar como? E uma ultima pergunta, precisa criar um IP próprio (IP Adicional – no caso locaweb) para o meu site?
Desde já, agradeço caso possam me ajudar.
Um Abraço
Misael says
olá pessoal,
alguma idéia de como automatizar o processo de renovação?
Help me, please!
Thanks!
Daniel says
Dê uma olhada no certbot e adicione no cron
https://github.com/certbot/certbot
Giovana says
Olá gente,
Alguém sabe dizer se esse SSL é adequado para uso em e-commerce? Por quê?
Edilson Cichon says
Valeu pela dica do site Tiago (https://www.whynopadlock.com/). Me salvou aqui haha.
Deyvson says
Thiago, como reinstalar o certificado? Tive que mudar de elastic ip porque alterei o servidor na AWS, meus dominios já estão com o novo servidor, mas ao instalar o certificado dá a seguinte mensagem:
IMPORTANT NOTES:
– The following errors were reported by the server:
Domain: ispconfig.almeidasistemas.ml
Type: unauthorized
Detail: Invalid response from
http://ispconfig.almeidasistemas.ml/.well-known/acme-challenge/avdhSZgGH_WY97DFYL9Cy1Rt_A0eMDAo1gUr-JUVNQA:
”
<ht"
To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain