Usar certificados da Let’s Encrypt com o Apache no CentOS 8
Hoje em dia, todos querem oferecer aos seus visitantes uma comunicação segura, aos seus sites. Isto tem se tornado uma pratica por varias razões. Quer porque os browsers já informam os utilizadores quando os sites não têm uma versão segura. Quer porque os donos dos sites querem que os seus sites tenham bons resultados nos motores de busca e para isso é obrigatório ter um site seguro. Quer pela simples razão que é importante realmente fornecer conteúdos seguros a todos os visitantes.
A Let’s Encrypt veio trazer a todos os que tenham um domínio, a possibilidade de ter um certificado reconhecido por todos os dispositivos atuais. De forma livre e sem qualquer custo. Desta forma acabando com problema de custos para os pequenos sites e blogues da Internet.
Neste artigo, vou descrever como usar um certificado da Let’s Encrypt no Apache e no CentOS 8, para que possamos oferecer comunicações seguras aos conteúdos de um site.
Em todos os comandos do artigo é usado o utilizador root!
Pré requisitos
Para que possamos seguir os passos deste artigo é necessário que tenha um máquina com o CentOS 8 e que já tenha o Apache instalado nesta máquina e a funcionar. Pois o Let’s Encrypt precisa comunicar com o servidor para confirmar que você controla este domínio.
Pode ver aqui neste artigo como instalar o Apache no CentOS 8.
Se seguiu o artigo acima, já tem com certeza o modulo “mod_sssl” do Apache instalado no sistema bem como o “openssl”, que será usado no artigo. Se já tem um Apache instalado sem suporte a SSL, terá que instalar o seguinte software:
# dnf install mod_ssl openssl
Instalar o Certbot
O Certbot é um script utilitário para a linha de comando, que permite criar e renovar certificados SSL da fundação Let’s Encrypt.
O CentOS 8 não traz nos seus repositórios por defeito o Certbot. Para podermos usar este utilitário temos de descarrega-lo do site oficial do projeto.
Para podermos descarrega-lo para o nosso sistema, corremos o seguinte comando:
# wget -P /usr/local/bin https://dl.eff.org/certbot-auto
Neste momento, se o download correu bem, já temos o nosso comando no diretório /usr/local/bin.
No entanto temos que dar permissão de execução ao ficheiro, para isso corremos o seguinte comando:
# chmod +x /usr/local/bin/certbot-auto
Neste momento, já temos o utilitário Certbot instalado e podemos usa-lo para seguir o resto do artigo.
Obter o certificado
Agora podemos correr o Certbot para obter o nosso certificado SSL.
Neste artigo vou usar o plugin “webroot” do Certbot para permitir que o nosso certificado seja renovado automaticamente sempre que necessário.
Para gerar o nosso certificado corremos o seguinte comando:
# /usr/local/bin/certbot-auto certonly --agree-tos --email admin@sleeping.pt --webroot -w /var/www/html/ -d sleeping.pt -d www.sleeping.pt
O comando anterior irá gerar um certificado que é valido para o domínio “sleeping.pt” bem como também para o subdomínio “www.sleeping.pt”. Se precisar adicionar mais subdomínios use a opção “-d subdominio”
Se o comando correr com sucesso, a seguinte mensagem será apresentada:
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/sleeping.pt/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/sleeping.pt/privkey.pem
Your cert will expire on 2020-02-02. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Neste momento já temos o certificado SSL para usarmos no servidor web Apache.
Configurar o Apache
Agora que temos o certificado SSL para o nosso domínio, temos de configurar o Apache para que use o novo certificado.
Temos de editar o ficheiro “/etc/httpd/conf.d/ssl.conf” e modificar as seguinte variáveis:
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
Para o seguinte:
SSLCertificateFile /etc/letsencrypt/live/sleeping.pt/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/sleeping.pt/privkey.pem
Quando guardarmos o ficheiro modificado, temos de mandar o Apache recarregar as novas configurações. Para isso corremos o seguinte comando:
# systemctl reload httpd
Neste momento o nosso Apache já usa o certificado da Let’s Encrypt. Se abrirmos a URL https//:www.sleeping.pt/ podemos ver que o browser já apresenta o cadeado verde e que o certificado é valido e foi verificado pela Let’s Encrypt. Como vemos na seguinte imagem:
Renovar automaticamente o certificado
Os certificados da Let’s Encrypt são validos apenas por 90 dias. O que é um tempo bastante curto comparado com certificados de outras autoridades certificadoras. A meu ver é o único ponto negativo que encontro na Let’s Encrypt. No entanto este ponto negativo deixa de existir se usarmos o Certbot para renovar automaticamente o certificado.
O Certbot permite renovar automaticamente o nosso certificado em segundo plano. Sem qualquer interação nossa. Para isso basta criar um novo trabalho no CRON do sistema para que verifique todos os dias se o certificado está a expirar. O certificado será renovado sempre que faltar menos de 30 dias para a data de expiração do certificado. Desta forma mantendo sempre o nosso certificado válido.
Para criarmos um novo trabalho no CRON do sistema para que corra o Certbot uma vez por dia corremos o seguinte comando:
# echo "0 0 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload httpd\"" | tee -a /etc/crontab > /dev/null
Para testarmos se está tudo bem com o processo de renovação do certificado devemos correr o seguinte comando:
# /usr/local/bin/certbot-auto renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/sleeping.pt.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Renewing an existing certificate
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/sleeping.pt/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates below have not been saved.)
Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/sleeping.pt/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
** (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Se não forem apresentados erros é porque tudo está bem com o processo de renovação do certificado.
Conclusão
É fácil disponibilizar conteúdos aos visitantes do nosso site de forma segura usando os certificados da Let’s Encrypt.
Com a ajuda do Certbot toda a configuração torna-se simples e automatizada.
Hoje em dia, já não existe uma razão para não disponibilizar conteúdos de forma segura aos nossos visitantes.