Instalar certificado SSL/TLS digital válido gratuito no Linux

Veremos como instalar um certificado SSL/TLS válido e gratuito para colocar no seu site e criptografar a transmissão dos dados. A instalação utilizada foi a mais padrão possível para se adaptar à maioria das distribuições Linux, porém, apesar de ser padrão, não é básica.

[ Hits: 7.663 ]

Por: Buckminster em 01/04/2023


Configurando



Renovação dos certificados

O certificado auto-assinado é válido por 90 dias. No entanto, este pode ser renovado quando estiver prestes a expirar nos últimos 30 dias.

Renovação manual

O processo de renovação dos certificados Let's Encrypt é facilitado pelo certbot que reutiliza os parâmetros usados na criação do certificado.

Os certificados são renovados apenas se estiverem prestes a expirar.

Caso tente renovar antes do término do prazo de 90 dias dará um aviso de que não foi possível renovar:

# certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

-----------------------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/exemplo.com.conf
-----------------------------------------------------------------------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
/etc/letsencrypt/live/home.example.com/fullchain.pem (skipped)
No renewals were attempted.

----------------------------------------------------------------------------------------------


Antes de renovar pode fazer uma simulação com:

# certbot renew --dry-run

Renovação automática

Opcionalmente, pode-se criar uma tarefa agendada no Cron para proceder à renovação automática dos certificados quando estes estiverem prestes a expirar.

Durante a instalação o certbot configura essa tarefa de forma automática.

Você pode vislumbrar o arquivo com:

# vim /etc/cron.d/certbot

* ou use teu editor de texto predileto.

# /etc/cron.d/certbot: crontab entries for the certbot package
#
# Upstream recommends attempting renewal twice a day
#
# Eventually, this will be an opportunity to validate certificates
# haven't been revoked, etc.  Renewal will only occur if expiration
# is within 30 days.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew

Para adicionar um domínio:

# certbot-auto --expand -d dominio1.com.br,dominio2.com.br

Para deletar um certificado:

# certbot revoke --cert-path /etc/letsencrypt/live/www.exemplo.com/fullchain.pem

Para ver o status e se o certificado está ativo e ver informações como data, etc:

# systemctl status certbot.timer

Arquivo meu_site.conf:

# cd /etc/apache2/sites-available
# vim meu_site.conf

Lembrando que o arquivo meu_site.conf você já deverá tê-lo criado na instalação e configuração do Apache2.

Aqui chamaremos de exemplo.conf.

# vim exemplo.conf

Coloque o seguinte dentro do arquivo:

<VirtualHost *:80>
   ServerName www.exemplo.com.br
   ServerAlias exemplo.com.br
   Redirect permanent / https://www.exemplo.com.br/
   # ErrorLog ${APACHE_LOG_DIR}/www.exemplo.com.br/www-error.log
   # CustomLog ${APACHE_LOG_DIR}/www.exemplo.com.br/www-access.log combined
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
#
<VirtualHost _default_:443>
   ServerName exemplo.com.br
   Redirect permanent / https://www.exemplo.com.br/
   SSLProxyEngine on
   SSLEngine on
   SSLCertificateFile        /etc/letsencrypt/live/www.exemplo.com.br/cert.pem
   SSLCertificateKeyFile /etc/letsencrypt/live/www.exemplo.com.br/privkey.pem
   SSLCaCertificateFile   /etc/letsencrypt/live/www.exemplo.com.br/fullchain.pem
</VirtualHost>
#
<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin admin@exemplo.com.br
                ServerName www.exemplo.com.br
                DocumentRoot /var/www/exemplo.com.br
                SSLEngine on
    SSLCertificateFile        /etc/letsencrypt/live/www.exemplo.com.br/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/www.exemplo.com.br/privkey.pem
    SSLCaCertificateFile   /etc/letsencrypt/live/www.exemplo.com.br/fullchain.pem
                <FilesMatch ".(cgi|shtml|phtml|php)$">
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                </Directory>
                BrowserMatch "MSIE [2-6]"
                                nokeepalive ssl-unclean-shutdown
                                downgrade-1.0 force-response-1.0
                BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
        </VirtualHost>
</IfModule>

Coloque teu site no lugar de www.exemplo.com.br e acrescente as tuas configurações no arquivo, se quiser. Salve e saia do arquivo e execute:

Para criar um link com sites-enabled, se já não tiver:

# a2ensite exemplo.conf

Para dar um reload nas configurações:

# systemctl reload apache2

Para reiniciar o Apache2:

# systemctl restart apache2 <

Teste abrindo o navegador e digitando na barra de endereços:

www.exemplo.com.br

e verá teu site abrir com HTTPS e o cadeado ao lado.

Caso isso não aconteça ou que apareça aquela página escrota de "site não confiável", certificado inválido, etc, pode ser que seja a tua primeira vez com o Certbot, então acesse o e-mail que tu cadastrou na instalação e clique no link do e-mail enviado pelo Certbot para ativar. As vezes é necessário, as vezes não.

Repare que temos três linhas:

SSLCertificateFile         /etc/letsencrypt/live/exemplo.com.br/cert.pem
SSLCertificateKeyFile  /etc/letsencrypt/live/exemplo.com.br/privkey.pem
SSLCaCertificateFile    /etc/letsencrypt/live/exemplo.com.br/fullchain.pem

  • SSLCertificateFile - arquivo de dados de certificado X.509 codificado por PEM do servidor ou identificador de token; aponta para um arquivo com os dados do certificado.
  • SSLCertificateKeyFile - arquivo de chave privada codificado por PEM do servidor; aponta para o arquivo de chave privada.
  • SSLCaCertificateFile - arquivo de certificados CA codificados por PEM concatenados para autenticação do cliente; define o arquivo tudo-em-um onde são montados os Certificados das Autoridades Certificadoras (CA).

PEM - significa Privacy Enhanced Mail (E-mails reforçados para privacidade). O formato PEM é frequentemente usado para representar certificados, solicitações de certificado, cadeias de certificados e chaves. A extensão típica para um arquivo formatado como PEM é . pem, mas não precisa ser. É usado para estabelecer um canal de comunicação seguro entre um servidor da Web e um navegador. É codificado em Base64 e pode conter uma chave privada, certificado de servidor e/ou uma combinação de outros certificados.

Grosso modo, PEM é um formato de arquivo contêiner que define a estrutura e o tipo de codificação do arquivo usado para armazenar os dados.

As duas linhas:

Redirect permanent / https://www.exemplo.com.br/

fazem o redirecionamento de todas as conexões HTTP para HTTPS, ou seja, se alguém acessar teu site com http://www.exemplo.com.br será sempre automaticamente redirecionado para https://www.exemplo.com.br.

Caso tiver arquivos 000-default.conf aconselho a executar:

# mv 000-default.conf 000-default.conf.bkp

As linhas ServerName e ServerAlias deixe-as como estão.

Pode testar colocando ServerName e ServerAlias, os dois somente com www.exemplo.com.br ou com exemplo.com.br e verá que teu site poderá ficar lento ou aparecer o erro ERR_CONNECTION_REFUSED. O Apache é um cara bem sensível.

As linhas com BrowserMatch, pesquise no link com mod_setenvif abaixo.

A título de curiosidade, no arquivo README.Debian.gz do Apache2 encontramos informações interessantíssimas.

Caminho no Debian, procure o caminho na tua distribuição:

# vim /usr/share/doc/apache2/README.Debian.gz

Referências


Página anterior    

Páginas do artigo
   1. Introdução
   2. Instalando
   3. Configurando
Outros artigos deste autor

Montagem de Cluster

Instalação do PostgreSQL com Apache 2, PHP 5, OpenSSL no Debian Wheezy 7.7 64 bits com systemd e chroot

Redes de Computadores · IPtables · Endereços IPs - Explicações básicas

Compilação de Kernel

Manual traduzido do Squid

Leitura recomendada

Como forçar alteração de senha de usuário no próximo login no Linux

Ferramenta Forense de Análise de Rede (NFAT) - Xplico

Certificação CISSP

HoneyPots em Linux

O que é ForceCommand

  
Comentários
[1] Comentário enviado por maurixnovatrento em 14/05/2023 - 22:02h


Muito bom o artigo.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts