Gerando certificados SSL gratuitos com Certbot

Vimos anteriormente como automatizar a geração de certificados SSL locais para ambientes de desenvolvimento, mas e quando precisamos de um certificado para um servidor de produção? Não podemos utilizar um certificado local auto-assinado nesse caso, e tradicionalmente para gerar um certificado SSL precisamos pagar por isso.

Entretanto, existe algumas alternativas para gerar um certificado SSL válido para seus ambientes fora do ambiente local. Uma dessas formas é com o Certbot. Vamos conhecer nesse artigo o Certbot, como ele funciona e como podemos configurá-lo em um dos nossos servidores.

O que o Certbot faz

Acessar um site que tenha HTTPS é quase um pré requisito hoje em dia. Além de ser recomendável pelos principais navegadores, acessar um site com HTTPS te dá mais segurança e até ajuda no rankeamento do seu site nos resultados de busca do Google. Para isso é preciso ter um certificado SSL emitido por uma Autoridade Certificadora (Certificate Authority) que reconhece a sua titularidade para determinado domínio. Para uma introdução sobre SSL, leia mais no artigo O que é certificado SSL.

Para gerar um certificado SSL válido é preciso vários passos, como entrar em contato com uma Autoridade Certificadora, gerar a chave privada que vai ser utilizada para assinar seu certificado e enviar seu certificado para a Autoridade Certificadora, validar que você é o responsável pelo domínio que deseja utilizar HTTPS, aguardar a resposta da Autoridade Certificadora e configurar seus servidores. Tudo isso precisa ser repetido anualmente ou a cada três anos, pois o certificado SSL tem um prazo de validade, e geralmente existe um custo envolvido para a emissão desse certificado.

Esse processo pode ser automatizado, e o melhor, realizado de forma gratuita, ao utilizar o Certbot. O Certbot é um utilitário em linha de comando mantida pela Eletronic Frontier Fountation (EFF), uma organização sem fins lucrativos que luta pela privacidade online e desenvolve tecnologias para melhorar a segurança na internet.

Junto com Let’s Encrypt, o Certbot faz parte de uma iniciativa da EFF que tem como objetivo encriptar a internet como um todo. Desde o lançamento do Let’s Encrypt e do Certbot (que chegou na sua versão 1.0 recentemente), o percentual do tráfego web que é encriptado saiu de 40% para 77%, segundo dados da EFF.

Com o Certbot é possível gerar certificados emitidos pelo Let’s Encrypt como Autoridade Certificadora, gerar e configurar esse certificado em seu servidor web e renovar automaticamente esse certificado, tudo isso de forma gratuita. Para isso você só precisa ter acesso SSH ao seu servidor e acesso ao sudo. Caso esteja utilizando uma hospedagem talvez você não tenha acesso ao SSH dos servidores, porém algumas hospedagens já suportam a geração de certificados através dos seus painéis.

Vamos acompanhar como gerar esse certificado utilizando um servidor Ubuntu 18.04 LTS com Ngnix.

Como instalar o Certbot no Ubuntu com Nginx

Para efetuar a instalação do Certbot, é preciso que nosso servidor Web já esteja configurado com nosso domínio e esteja rodando com HTTP. O Certbot se encarregará de configurar um desafio com HTTP para validar que você é responsável por aquele domínio. Caso isso não seja possível, existe a opção de efetuar um desafio incluindo um registro TXT no seu domínio, porém esse processo leva mais tempo.

Site sem HTTPS

Ao selecionar sua distribuição e servidor web, você pode consultar as instruções para instalação. No Ubuntu, vamos adicionar o repositório do apt-get do Cerbot e iniciar sua instalação:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository universe
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update

sudo apt install certbot python-certbot-nginx

No último comando, temos a variação de um script python com a variação de web server utilizado. Por exemplo, caso esteja utilizando o Apache, você instalaria python-certbot-apache

O próximo passo é executar o certbot com o argumento do servidor web que você irá configurar:

sudo certbot --nginx

Caso se sinta mais confortável, você pode escolher fazer a configuração do seu servidor web manualmente, e somente gerar o certificado com a opção certonly:

sudo certbot certonly  --nginx

Será feita algumas perguntas, como qual o domínio a ser configurado, se você deseja redirecionar todo o tráfego para HTTPS automaticamente, entre outros. Será gerado então sua chave privada para esse certificado e o Nginx será configurado de acordo:

Execução do certbot

Com isso temos nosso servidor configurado e respondendo em HTTPS!

Site com HTTPS

O Certbot irá gerar um certificado com validade de apenas três meses, ao contrário dos certificados de um ou três anos geralmente emitidos por outras Autoridades Certificadoras. Entretanto, o certificado do Certbot é gratuito e se renova automaticamente. É possível testar o processo de renovação automática com o comando:

sudo certbot renew --dry-run

Caso você esteja utilizando outra distribuição Linux, na página inicial do Certbot você pode consultar instruções detalhadas de como instalar em diferentes distribuições e servidores web:

Opções de servidores e distribuições suportadas

O que mais o Certbot pode fazer?

Vimos aqui o processo de geração de certificados no caso que temos acesso ao servidor via SSH. Em uma hospedagem compartilhada isso pode não ser possível, porém caso a mesma forneça suporte para utilizar um certificado SSL gerado por você, é possível gerar o certificado somente na sua máquina local e fazer o upload dos certificados necessários pela sua hospedagem.

É possível até gerar um certificado wildcard, que é válido para todos os subdomínios, caso seu domínio esteja em um DNS suportado. O processo para gerar um certificado wildcard é bem próximo ao mostrado anteriormente, alterando somente os plugins utilizados na hora da instalação.

Para outras variações de configuração, confira a documentação do Certbot para instruções mais detalhadas para seu cenário. Muito provavelmente você encontrará o que precisa.

Deixe seu comentário

Autor dos cursos de cloud computing da TreinaWeb. Graduado em Gestão de TI pela FATEC e quase bacharel em Sistemas de Informação pela UFSCar. Tem experiência em desenvolvimento backend com PHP, mas se encontrou trabalhando com DevOps. Microsoft Certified: DevOps Engineer Expert, Azure Solutions Architect Expert e Azure Data Engineer Associate, AWS Certified Solutions Architect - Associate, e Zend Certified Engineer (ZCE). @gmsantos

© 2004 - 2019 TreinaWeb Tecnologia LTDA - CNPJ: 06.156.637/0001-58 Av. Paulista, 1765, Conj 71 e 72 - Bela Vista - São Paulo - SP - 01311-200