Let's Encrypt – Certificados SSL/TLS gratuitos
Semana passada, de 13 à 16 de Julho, aconteceu em Porto Alegre o FISL(Fórum Internacional de Software Livre) onde tive a grande oportunidade de realizar algumas atividades pela Mozilla Brasil como voluntário. Umas das atividades foi sobre Let’s Encrypt, então resolvi escrever este artigo para apresentar o Let’s Encrypt a quem ainda não conhece e mostrar como é simples implementá-lo.
Falando um pouco da história, o projeto foi iniciado em 2012 pela Mozilla em conjunto com a EFF(Electronic Frontier Foundation) e anunciado para o público em 2014. Em Setembro de 2015 o primeiro certificado foi gerado e a partir de Outubro de 2015 os certificados gerados pela Let’s Encrypt já eram aceitos pelos maiores browsers. Durante todo o processo de estruturação do Let’s Encrypt várias empresas se tornaram apoiadoras do projeto como: Akamai, Cisco, Facebook, Google, IdenTrust e muitas outras.
O principal objetivo do Let’s Encrypt é disponibilizar certificados SSL/TLS para todos, seja para uma pessoas física, empresa ou instituição, totalmente gratuitos e sem burocracia.
“Acabou o tempo em que era preciso pagar valores absurdos para obter um certificado SSL válido, agora com o Lets Encrypt e com apenas 1 comando você consegue um certificado válido e reconhecido por todos os navegadores e aplicações assim como um certificado SSL normal.”
Samuel Moares
Validação do Domínio
O Let’s Encrypt identifica o administrador do servidor por uma chave pública. Na primeira interação do agente do Let’s Encrypt instalado no cliente com o servidor do Let’s Encrypt, o agenre gera um novo par de chaves e prova para a Let’s Encrypt CA(Certificate Authority) que o servidor controla um ou mais domínios.
Para iniciar o processo o agente pergunta a Let’s Encrypt CA o que deve ser feito na sequência para provar que o servidor controla o domínio, por exemplo, exemplo.com. Há diferentes formas de o agente provar que o servidor controla este domínio. Por exemplo o Let’s Encrypt CA pode permitir ao agente escolher entre:
- Prover um registro DNS no exemplo.com, ou
- Prover um recurso HTTP em uma URL bem conhecida em https://exemplo.com
Ao longo destes passos, a Let’s Encrypt CA também prove um número arbitrário que o agente deve assinar com seu par de chaves privadas para provar que ele controla o par de chaves.
O agente completa uma das tarefas. Vamos dizer que o agente era capaz de realizar a segunda tarefa acima, então ela cria um arquivo em um diretório especificado no site https://exemplo.com.
O agente também assina o número arbitrário fornecido com seu par de chaves. Uma vez que o agente completar estas tarefas ele notifica a Let’s Encrypt CA que está pronto para completar a validação.
Então é a vez da Let’s Encrypt CA verificar se as tarefas foram concluídas com um resultado satisfatório. A Let’s Encrypt CA verifica a assinatura do número arbitrário fornecido, baixa o arquivo gerado do servidor web e verifica se ele contem o conteúdo esperado.
Se a assinatura do número arbitrário fornecido for válida e as tarefas concluídas, então o agente identificado pela chave pública é autorizado a baixar e instalar certificado para o domínio exemplo.com.
Limites a serem respeitados
- 100 nomes por certificado
- 20 certificados por domínio/semana
- 5 domínios por semana
Na prática com Apache
Vamos colocar a mão na massa e ver na pratica como é simples!
Os passos abaixo consideram apenas o processo para gerar e instalar o certificado, considerando que seu servidor já funciona perfeitamente com HTTP.
Dica: É necessário especificar a porta no Virtual Host para funcionar corretamente.
1º) Clonar o repositório do Let’s Encrypt:
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
2º) Entrar no diretório:
cd /opt/letsencrypt
3º) Executar o agente para obter e instalar o certificado:
Para um único domínio:
./letsencrypt-auto --apache -d exemplo.com
Para mais domínios:
./letsencrypt-auto --apache -d exemplo.com -d exemplo1.com -d exemplon.com
4º) Se tudo ocorrer bem será solicitado um e-mail para o qual serão enviadas as notificações.
5º) Em seguida você deverá escolher entre utilizar apenas HTTPS ou permitir HTTP e HTTPS.
Ao chegar neste ponto sem erros significa que seu certificado já foi instalado com sucesso. Você também pode encontrá-lo em /etc/letsencrypt/live
. É possível verificar o status do seu certificado em: https://www.ssllabs.com/ssltest/analyze.html?d=exemplo.com&latest (Substituindo exemplo.com pelo seu domínio)
Para renovar o(s) certificados basta executar:
./letsencrypt-auto renew
Os certificados são válidos por 90 dias, você pode agendar uma tarefa para executar este comando a cada 89 dias, como por exemplo no CronTab.
O objetivo deste artigo que era dar uma visão geral do Let’s Encrypt e mostrar um exemplo simples de implementação, existem outros cenários para implementação do Let’s Encrypt como servidores Nginx, aplicações Node.js e muitos outros. Pretendo escrever mais artigos sobre a implementação nestes outros cenários.
Por hoje era isto pessoal, nos vemos em outros artigos!