Instalação do Let’s Encrypt no FreeBSD

Para essa instalação, é pré-requisito que você tenha instalado primeiro o Apache. Após instalar o apache e configurá-lo vamos para o Letsencypt. Vou deixar o link da instalação do Apache, quando terminar volte aqui para instalar o Let’s Encrypt.

1 - Primeiro vamos atualizar o ports e o PKG:

# portsnap fetch extract
# pkg update

2 - Agora vamos instalar alguns pacotes pelo pkg:

# pkg install py39-certbot-2.1.0,1 py39-certbot-apache-2.1.0

3 - Após a finalização da instalação dos pacotes acima, vamos gerar o certificado no nome do domínio:

OBS: Nos podemos gerar o certificado para um único domínio ou para vários domínios, abaixo deixo os dois tipos de comandos:

– Para um único domínio:

# certbot certonly --webroot -w /usr/local/www/pasta_do_meu_vhost -d SEU_DOMINIO_VEM_AQUI

– Para vários domínios:

# certbot certonly --webroot -w /usr/local/www/pasta_do_meu_vhost -d SEU_DOMINIO_VEM_AQUI -d WWW.SEU_DOMINIO_VEM_AQUI

OBS: Após a execução do comando acima, você terá que informar um e-mail válido:

– Ao final você recebera uma mensagem de sucesso como essa:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for meu_domínio

Successfully received certificate.
Certificate is saved at: /usr/local/etc/letsencrypt/live/meu_domínio/fullchain.pem
Key is saved at:         /usr/local/etc/letsencrypt/live/meu_domínio/privkey.pem
This certificate expires on 2023-06-06.
These files will be updated when the certificate renews.

NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

4 - Breve explicação do comando usado para gerar o certificado:

-certbot: é o comando principal da ferramenta Certbot, usada para obter, renovar e gerenciar certificados SSL/TLS gratuitos.

-certonly: é uma opção que especifica que queremos apenas obter um novo certificado sem instalar automaticamente em um servidor web, o que nos permite controlar manualmente a instalação do certificado.

–webroot: é uma opção que especifica que queremos usar o método de autenticação Webroot para obter o certificado. O método de autenticação Webroot permite que o Certbot obtenha uma confirmação de que você possui o controle do domínio especificado, colocando um arquivo de desafio temporário em um diretório da sua aplicação web.

-w /usr/local/www/pasta_do_seu_vhost: é a opção que especifica o caminho do diretório raiz da sua aplicação web que o Certbot irá usar para colocar o arquivo de desafio temporário. É importante que o diretório raiz da sua aplicação web esteja configurado corretamente para que o Certbot possa colocar o arquivo de desafio temporário e autenticar o domínio.

-d SEU_DOMINIO.COM.BR: é a opção que especifica o nome de domínio para o qual você deseja obter um certificado SSL/TLS.

-d WWW.SEU_DOMINIO.COM.BR: é outra opção que especifica um segundo nome de domínio para o qual você deseja obter um certificado SSL/TLS.

-v: é uma opção que especifica que você deseja executar o comando em modo verbose, o que significa que o Certbot exibirá mais informações de depuração durante o processo de obtenção do certificado.

5 - Agora que o certificado já foi gerado, vamos configurar o Apache para suportar HTTPS. Para fazer isso, você precisará editar o arquivo de configuração do Apache, localizado em /usr/local/etc/apache24/httpd.conf. Descomente a linha que ativa o módulo do ssl no Apache:

LoadModule ssl_module libexec/apache24/mod_ssl.so

- Após ativar o módulo do Apache, pesquise pela linha “Liesten” e altere a porta de 80 para 443, tudo isso dentro do arquivo /usr/local/etc/apache24/httpd.conf:

Listen 443

6 - Renovação do Certificado Letsencrypt. Para renovar o certificado Let's Encrypt após a expiração dos 3 meses, siga as seguintes etapas:

# certbot renew --reuse-key

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /usr/local/etc/letsencrypt/renewal/mundobsd.com.br.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewing an existing certificate for mundobsd.com.br and www.mundobsd.com.br

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all renewals succeeded: 
  /usr/local/etc/letsencrypt/live/mundobsd.com.br/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

OBS: Este comando irá renovar automaticamente todos os certificados Let's Encrypt que estão prestes a expirar em menos de 30 dias.

7 - Se você quiser renovar um certificado específico, use o comando abaixo, substituindo "meudominio.com" pelo nome de domínio para o qual você deseja renovar o certificado:

# certbot certonly --cert-name meudominio.com

OBS: Este comando irá renovar o certificado Let's Encrypt para o domínio especificado. Certifique-se de que o domínio esteja configurado corretamente e de que o diretório webroot especificado no comando esteja correto.

8 - Após a renovação do certificado, você pode verificar a data de validade do certificado usando o seguinte comando:

# openssl x509 -noout -dates -in /etc/letsencrypt/live/meudominio.com/fullchain.pem

OBS: É importante lembrar que você precisa renovar seu certificado Let's Encrypt a cada 3 meses. Para evitar interrupções no seu site, você pode configurar uma tarefa cron para renovar automaticamente o certificado antes do vencimento.

9 - Após toda as configurações acima, vamos precisar informar dentro do arquivo do nosso VHOST a localização dos arquivos do certificado. Segue um exemplo:


<VirtualHost 10.0.0.10:443>

        Protocols h2 h2c http/1.1
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
        
        ### Configurações do certificado
        
        SSLEngine On
        SSLCertificateFile /usr/local/etc/letsencrypt/live/seu_site.com.br/fullchain.pem
        SSLCertificateKeyFile /usr/local/etc/letsencrypt/live/seu_site.com.br/privkey.pem

        ####

        ServerAdmin seu_email@gmail.com
        ServerName exemple.com.br
        ServerAlias www.exemple.com.br
        DocumentRoot "/usr/local/www/seu_site/"
        ErrorLog "/var/log/seu_site.erro_log"
        CustomLog "/var/log/seu_site.access_log" common


<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

<IfModule mod_headers.c>
   Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>

Alias /seu_site /usr/local/www/seu_site
<Directory "/usr/local/www/seu_site">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

</VirtualHost>

10 - Feito todos os passos acima, agora é só reiniciar o apache e efetuar os testes: