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