Tutorial

Como proteger o Apache com o Let's Encrypt no Ubuntu 18.04

ApacheSecurityLet's EncryptUbuntu 18.04

Introdução

A Let’s Encrypt é uma autoridade certificadora (CA) que proporciona uma maneira descomplicada de obter e instalar certificados TLS/SSL, gratuitamente, possibilitando assim protocolos HTTPS criptografados em servidores web. Ela simplifica o processo ao fornecer um cliente de software, o Certbot, que tenta automatizar a maioria (se não todas) das etapas necessárias. Atualmente, todo o processo de obtenção e instalação de um certificado é totalmente automatizado em Apache e Nginx.

Neste tutorial, você usará o Certbot para obter um certificado SSL gratuito para o Apache no Ubuntu 18.04 e para configurar o seu certificado para renovação automática.

Este tutorial usará um arquivo de host virtual Apache separado em vez do arquivo de configuração padrão. Recomendamos que você crie novos arquivos de host virtual Apache para cada domínio, uma vez que isso ajuda a evitar erros comuns e mantém as linhas padrão como uma configuração de fallback.

Pré-requisitos

Para seguir este tutorial, será necessário:

  • Um servidor Ubuntu 18.04 configurado seguindo este tutorial de configuração inicial do servidor para o Ubuntu 18.04, incluindo um usuário sudo não raiz e um firewall.

  • Um nome de domínio totalmente registrado. Este tutorial usará o your_domain como um exemplo. Você pode comprar um nome de domínio em Namecheap, obter um gratuitamente em Freenom ou usar o registrado de domínios de sua escolha.

  • Ambos os registros de DNS a seguir serão configurados para o seu servidor. Você pode seguir esta introdução para DNS DigitalOcean para mais detalhes sobre como adicioná-los.

    • Um registro com o your_domain <^>apontando para o endereço IP público do seu servidor.
    • Um registro A com www.your_domain apontando para o endereço IP público do seu servidor.
  • O Apache instalado seguindo Como instalar o Apache no Ubuntu 18.04. Certifique-se de que tem um virtual host file para seu domínio. Este tutorial usará o /etc/apache2/sites-available/your_domain.conf como exemplo.

Etapa 1 — Instalando o Certbot

A primeira etapa para usar o Let’s Encrypt para obter um certificado SSL, é instalar o software Certbot no seu servidor.

O Certbot está franco desenvolvimento, de modo que os pacotes Certbot fornecidos pelo Ubuntu tendem a estar desatualizados. No entanto, os desenvolvedores do Certbot mantêm um repositório de software do Ubuntu com versões atualizadas, então iremos utilizar aquele repositório.

Primeiramente, adicione o repositório:

  • sudo add-apt-repository ppa:certbot/certbot

Aperte ENTER para aceitar.

Instale o pacote Apache do Certbot com o apt:

  • sudo apt install python-certbot-apache

O Certbot agora está pronto para ser usado. Para que ele configure o SSL para o Apache, porém, precisamos verificar algumas configurações do Apache.

Etapa 2 — Configurar o certificado SSL

O Certbot precisa encontrar o host virtual correto na sua configuração Apache para que ele configure automaticamente o SSL. Mais especificamente, ele faz isso procurando uma diretiva de ServerName que corresponda ao domínio ao qual você solicita um certificado.

Se você seguiu a etapa de configuração de host virtual no tutorial de instalação do Apache, você deve ter um bloco de VirtualHost para seu domínio em /etc/apache2/sites-available/your_domain.com.conf com a diretriz ServerName já configurada corretamente.

Para verificar, abra o arquivo de host virtual do seu domínio usando o nano ou seu editor de texto preferido:

  • sudo nano /etc/apache2/sites-available/your_domain.conf

Encontre a linha existente do ServerName. Ela deve se parecer com esta:

/etc/apache2/sites-available/your_domain.conf
...
ServerName your_domain;
...

Se parecer, saia do seu editor e siga para o próxima etapa.

Se não, atualize-a para corresponder. Em seguida, salve o arquivo, feche o editor e verifique a sintaxe de suas edições de configuração:

  • sudo apache2ctl configtest

Se aparecer um erro, abra novamente o arquivo de host virtual e verifique se há erros de digitação ou se faltam caracteres. Depois que a sintaxe do seu arquivo de configuração estiver correta, recarregue o Apache para aplicar a nova configuração:

  • sudo systemctl reload apache2

O Certbot agora consegue encontrar o bloco do VirtualHost correto e atualizá-lo.

Em seguida, atualizaremos o firewall para permitir o tráfego HTTPS.

Etapa 3 — Permitindo tráfego HTTPS pelo firewall

Se você tem o firewall ufw ativado, conforme recomendado pelos guias de pré-requisitos, será necessário ajustar as configurações para permitir o tráfego HTTPS. Felizmente, o Apache registra alguns perfis com o ufw na instalação.

Você pode verificar a configuração atual digitando:

  • sudo ufw status

Provavelmente irá se parecer com isso, o que significa que apenas o tráfego HTTP é permitido no servidor Web:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache (v6) ALLOW Anywhere (v6)

Para permitir também o tráfego HTTPS, autorize o perfil Apache Full e apague a autorização de perfil Apache redundante:

  • sudo ufw allow 'Apache Full'
  • sudo ufw delete allow 'Apache'

Seu status agora deve se parecer com este:

  • sudo ufw status
Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

Em seguida, vamos executar o Certbot e buscar os nossos certificados.

Etapa 4 — Obtendo um certificado SSL

O Certbot oferecer várias maneiras de obter certificados SSL através de plug-ins. O plug-in Apache cuidará da reconfiguração do Apache e recarregará a configuração sempre que necessário. Para usar este plug-in, digite o seguinte:

  • sudo certbot --apache -d your_domain -d www.your_domain

Isso executa o certbot com o plug-in --apache, usando -d para especificar os nomes para os quais deseja um certificado válido.

Se essa é a primeira vez que você executa o certbot, você será solicitado a informar um endereço de e-mail e concordar com os termos de serviço. Após fazer isso, o certbot se comunicará com o servidor da Let’s Encrypt, executando posteriormente um desafio para verificar se você controla o domínio para o qual está solicitando um certificado.

Se tudo correr bem, o certbot perguntará como você quer definir suas configurações de HTTPS:

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. ------------------------------------------------------------------------------- 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. ------------------------------------------------------------------------------- Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Select your choice then hit ​​​ENTER​​​​​. A configuração será atualizada e o Apache recarregará para aplicar as novas configurações. O certbot será encerrado com uma mensagem informando que o processo foi concluído com sucesso e onde os certificados foram armazenados:

Output
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your_domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your_domain/privkey.pem Your cert will expire on 2018-07-23. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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

Seus certificados são baixados, instalados e carregados. Tente recarregar o site usando https:// e verifique o indicador de segurança do seu navegador. Ele deve indicar que o site está devidamente protegido, normalmente com um ícone de cadeado verde. Se você testar o servidor usando o SSL Labs Server Test​​​​, receberá uma classificação A.

Vamos concluir testando o processo de renovação.

Etapa 5 — Verificando a renovação automática do Certbot

Os certificados da Let’s Encrypt possuem validade de apenas 90 dias. Isso visa incentivar os usuários a automatizar o processo de renovação de certificados. O pacote do certbot que instalamos cuida disso ao adicionar um script de renovação em /etc/cron.d. Esse script é executado duas vezes por dia e renova automaticamente qualquer certificado que expire dentro de trinta dias.

Para testar o processo de renovação, você pode realizar uma simulação com o certbot:

  • sudo certbot renew --dry-run

Se não aparecerem erros, tudo funcionou. Quando necessário, o Certbot renovará seus certificados e recarregará o Apache para aplicar as alterações. Se o processo de renovação automatizada alguma vez falhar, a Let’s Encrypt enviará uma mensagem para o e-mail que você especificou, informando quando o certificado vai expirar.

Conclusão

Neste tutorial, você instalou o certbot do cliente Let’s Encrypt, baixou os certificados SSL para o seu domínio, configurou o Apache para usar esses certificados e configurou a renovação automática de certificados. Em caso de outras dúvidas sobre como usar o Certbot, a documentação da ferramenta é um bom ponto de partida.

Creative Commons License