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.

Representção do funcionamento do Let's Encrypt
Representção do funcionamento do Let’s Encrypt

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.

Reprensetação autenticação do Let's Encrypt
Reprensetação autenticação do Let’s Encrypt

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!