O certificado WildCard, também conhecido como certificado curinga, possibilita que você adicione a segurança SSL em ilimitados sites, desde que sejam subdomínios de um mesmo domínio (um nível), em ilimitados servidores.
Com o Curinga você utiliza apenas um certificado para proteger o seu site principal (Ex. tiozaodolinux.com) e todos os outros sites compostos por seus subdomínios (Ex.: blog.tiozaodolinux.com, cloud.tiozaodolinux.com, zabbix.tiozaodolinux.com, portainer.tiozaodolinux.com, etc).
O certificado WildCard é emitido para o nome comum *.tiozaodolinux.com.
Créditos da Imagem - https://slayer.tech/como-gerar-certificados-ssl-tls-com-wildcard-usando-lets-encrypt-certbot/
A maioria dos certificados Let's Encrypt são emitidos usando validação HTTP, o que permite a fácil instalação de certificados em um único servidor. No entanto, a validação HTTP nem sempre é adequada para emitir certificados para uso em sites com balanceamento de carga, nem pode ser usada para emitir certificados curinga.
A validação de DNS permite que as solicitações de emissão de certificados sejam verificadas usando registros DNS, em vez de servir conteúdo por HTTP. Isso significa que os certificados podem ser emitidos simultaneamente para um cluster de servidores da Web executados atrás de um balanceador de carga ou para um sistema que não pode ser acessado diretamente pela Internet. Os certificados curinga também são compatíveis com a validação de DNS.
A ferramenta acme-dns-certbot é usada para conectar o Certbot a um servidor DNS de terceiros, onde os registros de validação do certificado podem ser definidos automaticamente por meio de uma API quando você solicita um certificado. A vantagem disso é que você não precisa integrar o Certbot diretamente à sua conta de provedor de DNS, nem precisa conceder a ele acesso irrestrito à sua configuração de DNS completa, o que é benéfico para a segurança.
As zonas DNS delegadas são usadas para redirecionar as pesquisas dos registros de verificação de certificados para o serviço DNS de terceiros, portanto, uma vez concluída a configuração inicial, você pode solicitar quantos certificados quiser sem precisar realizar nenhuma validação manual.
Outro benefício importante do acme-dns-certbot é que ele pode ser usado para emitir certificados para servidores individuais que podem estar sendo executados por trás de um balanceador de carga ou não podem ser acessados diretamente por HTTP. A validação de certificado HTTP tradicional não pode ser usada nesses casos, a menos que você defina os arquivos de validação em cada servidor. A ferramenta acme-dns-certbot também é útil se você deseja emitir um certificado para um servidor que não pode ser acessado pela Internet, como um sistema interno ou ambiente de preparação.
Lista de Provedores de DNS que se integram facilmente com o LetsEncrypt:
https://community.letsencrypt.org/t/dns-providers-who-easily-integrate-with-lets-encrypt-dns-validation/86438
Servidor: Ambiente utilizado: Ubuntu Nuvem disponível aqui
Um nome de domínio para o qual você pode adquirir um certificado TLS, incluindo a capacidade de adicionar registros DNS. Neste exemplo específico, usaremos *.tiozaodolinux.com, *.dev.tiozaodolinux.com e *.hom.tiozaodolinux.com
PS.: TODOS os comandos abaixo foram executados como
root
, então já sabe né: sudo su -
O objetivo do Certbot, Let's Encrypt e do protocolo ACME (Automated Certificate Management Environment) é possibilitar a configuração de um servidor HTTPS e obter automaticamente um certificado de confiança do navegador, sem qualquer intervenção humana.
Instalando o pacote:
apt-get -y install certbot
wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py
Como todo script, precisamos dar uma permissão de execução:
chmod +x acme-dns-auth.py
Ajuste a primeira linha para forçá-lo a usar o Python 3:
sed -i 's|^#!/usr/bin/env python$|#!/usr/bin/env python3|' acme-dns-auth.py
Conferino se a alteração surtiu efeito:
head -n 1 acme-dns-auth.py
#!/usr/bin/env python3
Movendo o script para o diretório Let's Encrypt para que o certbot possa executá-lo mais facilmente:
mv acme-dns-auth.py /etc/letsencrypt/
Conferindo os arquivos do diretório
tree -afp /etc/letsencrypt/
[drwxr-xr-x] /etc/letsencrypt
├── [-rwxr-xr-x] /etc/letsencrypt/acme-dns-auth.py
└── [-rw-r--r--] /etc/letsencrypt/cli.ini
0 directories, 2 files
Executando o certbot
para emitir um certificado usando a validação de DNS que irá acionar o processo de configuração inicial:
certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py \
--preferred-challenges dns --debug-challenges -d \*.tiozaodolinux.com -d tiozaodolinux.com
Alguns detalhes interessantes sobre os parâmetros:
Você será solicitado a provar que é dono dos domínios solicitados adicionando um CNAME especial
_acme-challenge
conforme abaixo:
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): [email protected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: y
Account registered.
Requesting a certificate for *.tiozaodolinux.com and tiozaodolinux.com
Hook '--manual-auth-hook' for tiozaodolinux.com ran with output:
Please add the following CNAME record to your main DNS zone:
_acme-challenge.tiozaodolinux.com CNAME e3dc8378-7b38-4791-89f5-c15e15189dc1.auth.acme-dns.io.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Challenges loaded. Press continue to submit to CA. Pass "-v" for more info about
challenges.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue
No seu gerenciador de DNS e adicione um registro de alias (CNAME) conforme solicitação acima.
Para quem utiliza o BIND como gestor de DNS uma entrada deverá se assemelhar como a abaixo:
_acme-challenge.tiozaodolinux.com. IN CNAME e3dc8378-7b38-4791-89f5-c15e15189dc1.auth.acme-dns.io.
Depois de realizada a inclusão no DNS, devemos validar se realmente estamos prontos para dar sequência no certbot, consultando outro DNS externo para verificar se nossa alteração já foi propagada:
host -t TXT _acme-challenge.tiozaodolinux.com 8.8.8.8
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
_acme-challenge.tiozaodolinux.com is an alias for e3dc8378-7b38-4791-89f5-c15e15189dc1.auth.acme-dns.io.
e3dc8378-7b38-4791-89f5-c15e15189dc1.auth.acme-dns.io descriptive text "_J3GB5KPz8m-JzZiLl_3Q6pnNq48GK9Fwagyl_V7mSU"
e3dc8378-7b38-4791-89f5-c15e15189dc1.auth.acme-dns.io descriptive text "S3E6ApgEou39exaogGdJONNu7wOjsRyKrIOdoHHqfbs"
Se na consulta de DNS não aparecer nada, pode ser que o serviço de DNS está configurado com um TTL alto e só nos resta aguardar a replicação.
Estando tudo certo até aqui, finalmente podemos dar ENTER na console do certbot que está aguardando a nossa prova.
Uma resposta como a abaixo será exibida, informando que nosso certificado curinga foi gerado e onde ele se encontra.
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/tiozaodolinux.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/tiozaodolinux.com/privkey.pem
This certificate expires on 2023-09-15.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bora verificar o(s) certificado(s) gerado(s)
certbot certificates
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: tiozaodolinux.com
Serial Number: 3797e6e89e25e126379ffa809ada3ee1d75
Key Type: RSA
Domains: *.tiozaodolinux.com tiozaodolinux.com
Expiry Date: 2023-09-15 02:25:09+00:00 (VALID: 88 days)
Certificate Path: /etc/letsencrypt/live/tiozaodolinux.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/tiozaodolinux.com/privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Vamos dar aquela olhadinha nos arquivos gerados?
tree -afp /etc/letsencrypt/live/
/etc/letsencrypt/live/
├── README
└── tiozaodolinux.com
├── cert.pem -> ../../archive/tiozaodolinux.com/cert1.pem
├── chain.pem -> ../../archive/tiozaodolinux.com/chain1.pem
├── fullchain.pem -> ../../archive/tiozaodolinux.com/fullchain1.pem
├── privkey.pem -> ../../archive/tiozaodolinux.com/privkey1.pem
└── README
1 directory, 6 files
Informações interessantes:
privkey.pem é sua chave privada (cuide bem dele)
fullchain.pem é cadeia completa da entidade que assinou o certificado (neste caso foi a Let's Encrypt)
cert.pem é o certificado propriamente dito
chain.pem é a cadeia básica da entidade que assinou o certificado.
O procedimento é o mesmo que o acima, observando que teremos que novamente provar que temos autoridade sobre o DNS.
Esse sub-subdomínio pode ser utilizado nas aplicações que necessitam ser validadas no ambiente de DEV (desenvolvimento).
certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py \
--preferred-challenges dns --debug-challenges -d \*.dev.tiozaodolinux.com
Esse sub-subdomínio pode ser utilizado nas aplicações que necessitam ser validadas no ambiente de HOM (homologação).
certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py \
--preferred-challenges dns --debug-challenges -d \*.hom.tiozaodolinux.com
PS.: Os procedimentos são análogos ao detalhado acima e devem ser realizados adicionando a entrada CNAME
_acme-challenge
no DNS para cada sub-subdomínio.
Como os certificados do Let's Encrypt são válidos por apenas 90 dias, devemos validar se está tudo funcionando corretamente simulando a renovação:
certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/tiozaodolinux.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for *.tiozaodolinux.com and tiozaodolinux.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/tiozaodolinux.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A validação com sucesso se dá pela mensagem: Congratulations, all simulated renewals succeeded:
Agora precisamos agendar no crontab para que os mesmos sejam renovados antes da expiração dos mesmos adicionando uma entrada conforme sugestão abaixo:
(crontab -l ; echo "15 12 * * * certbot renew > /tmp/certbot-renew.txt 2>&1") | crontab -
Dessa forma teremos a execução às 12:15 diariamente e os resultados serão armazenados no arquivo
/tmp/certbot-renew.txt
Vamos dar uma olhada no log?
cat /tmp/certbot-renew.txt
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/tiozaodolinux.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
/etc/letsencrypt/live/tiozaodolinux.com/fullchain.pem expires on 2023-09-15 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Uma aplicação direta para esses certificados curinga é utilizar o nginx como proxy reverso para as URLs necessárias.
Ficou interessado ?
Então veja este tutorial completo do Nginx Proxy Reverse com Wildcard
Gostou? Então não deixe de assistir ao vídeo onde explico melhor essa implementação.
https://youtu.be/Xq_FD3Oxmkk
Anton Putra
detalhando todo o processo - https://youtu.be/VJPfdXN-dSc