O Let’s Encrypt é um projeto encabeçado pela Linux Foundation com o intuito de popularizar e difundir a utilização de criptografia na web ao facilitar a aquisição e a instalação de certificados SSL assinados por uma autoridade certificadora.
Qualquer um que já precisou tornar um website mais seguro por meio da instalação de um certificado SSL sabe que não se trata de uma tarefa trivial. Além disso, como não é algo que fazemos diariamente, fica difícil lembrar os passos necessários na hora que precisamos, certo?
Com o Let’s encrypt não há a necessidade de e-mails de confirmação, certificados expirados quebrando seu site ou configurações complexas. O próprio programa cuida de tudo isso para você. Além de tudo, os certificados emitidos pelo Let’s Encrypt são gratuitos e, portanto, não há pagamento envolvido. Parece bom? Então vamos ver como ele funciona.
Como o Let’s Encrypt garante que não se trata de uma fraude?
O Let’s Encrypt implementa um novo protocolo chamado ACME com a finalidade de tornar mais simples a obtenção e a configuração de certificados SSL.
Há dois processos envolvidos em sua utilização: o primeiro é provar para a CA (Certificate Authority) do Let’s Encrypt que um determinado servidor controla aquele domínio. Uma vez confirmado isso, é possível requisitar, renovar e revogar um certificado para o domínio confirmado de forma automática.
O agente do Let’s Encrypt que instalaremos no servidor é na verdade um cliente em Python. Na primeira vez em que o cliente interagir com o servidor remoto da CA, ela irá gerar um par de chaves criptográficas para esse agente.
Em seguida, o servidor remoto irá solicitar um ou mais testes para confirmar se o servidor web realmente tem o controle do domínio para o qual ele solicita o certificado. Os testes podem ser, por exemplo:
- Criar um registro DNS na URL sob o domínio.
- Disponibilizar um recurso HTTP em uma página específica no domínio em questão.
Juntamente com os desafios, a CA do Let’s Encrypt pede que o agente assine os desafios com a chave pública enviada para ele, de forma que a CA possa checá-los com a chave privada. Certamente, trata-se de um processo bastante engenhoso e, até certo ponto, simples.
A imagem abaixo exemplifica esse processo: para provar que tem o controle do domínio example.com, o Let’s Encrypt solicita que o agente instalado no servidor disponibilize uma página com ed98 assinado digitalmente com a chave pública 9cf0b331 gerada anteriormente, na URL /8303.
Uma vez que o agente completa as tarefas solicitadas, ele avisa ao servidor remoto da CA que está pronto para a verificação e este, por sua vez, tenta baixar o documento solicitado esperando que o conteúdo seja aquele esperado. Se a assinatura criptográfica bater com a chave privada, o agente é considerado autorizado para gerenciar o domínio example.com.
Instalação do agente
Agora que sabemos como o Let’s Encrypt garante a autenticidade do certificado, vamos colocar a mão na massa para utilizar o programa. Se a sua distribuição Linux tiver um pacote com o programa, use-o. Caso contrário, iremos utilizar o Git:
$ git clone https://github.com/letsencrypt/letsencrypt $ cd letsencrypt ./letsencrypt-auto --help
O último comando acima irá identificar o seu sistema, baixar todas as dependências e atualizar o cliente automaticamente.
Utilização da ferramenta
A ferramenta utiliza diversos plugins que podem ser usados para obter e instalar os certificados. Se estiver utilizando o plugin Apache, ele automatiza tanto a obtenção quanto a instalação e a configuração do certificado no servidor:
./letsencrypt-auto --apache
Por enquanto, não há plugin para outras plataformas, portanto, caso utilize o Nginx ou outro servidor web, é possível utilizar a opção certonly –standalone. Para isso, pare o seu servidor e digite:
./letsencrypt-auto certonly --standalone -d seusite.com.br -d www.seusite.com.br
Em caso de hospedagens compartilhadas, é possível utilizar a opção certonly –webroot e especificar o diretório de instalação:
./letsencrypt-auto certonly -d seusite.com.br -d www.seusite.com.br -w /var/www/diretorio
Teste prático
Em meu teste, utilizei um Cloud Server Pro da Locaweb. Como não tinha nenhum domínio disponível, utilizei o próprio domínio fornecido pelo provedor: cpro31996.publiccloud.com.br. Instalei o Apache e executei o comando passando o domínio:
./letsencrypt-auto --apache -d cpro31996.publiccloud.com.br
Logo em seguida, fui solicitado a informar um e-mail para recuperação da chave, e outra tela me perguntou se eu queria permitir acesso HTTP ou redirecionar todo o tráfego para HTTPS. Escolhi a segunda opção.
Foi só reiniciar o Apache e o certificado já estava instalado e funcionando. Mágica! 🙂
Não foi necessário nem mesmo alterar o apache.conf.
Renovação do certificado
Para renovar o seu certificado, simplesmente execute o letsencrypt novamente e forneça os mesmo valores quando solicitado. Lembre-se de que o projeto ainda está em beta e, portanto, muita coisa pode mudar até que seja necessário renovar seu certificado.
Revogação do certificado
Para revogar um determinado certificado, passe o caminho completo do arquivo:
$ letsencrypt revoke --cert-path /caminho/do/seusite-cert.pem
A documentação completa pode ser lida no site do projeto.