Certificados Wildcard SSL com ACME (Let's Encrypt) e PfSense

De que forma os servidores do Let's Encrypt verificam se você realmente é dono do DNS?

Verificação via HTTP (http-01)

O servidor do Let's Encrypt fará uma requisição HTTP (ou HTTPs caso ocorra um redirecionamento)

(A requisição funcionará mesmo que feita via HTTPs e o certificado apresentado pelo web-server seja inválido, vencido, auto assinado, etc)

Verificação via DNS (dns-01)

O servidor do Let's Encrypt fará uma requisição DNS TXT no registro _acme-challenge.seudominio.dns com uma chave "digest" como valor.

Desafios em utilizar o ACME no pfSense

Desafios com a verificação via http-01

Este é o modo de verificação mais recomendado pela comunidade, entretanto o pfSense não conta com um servidor http embarcado por padrão. Para isso podemos utilizaro haproxy, entretanto não recomenda-se utilizá-lo para hospedar arquivos estáticos como o nginx.

Desafios com a verificação via dns-01

O servidor de DNS utilizado (se não estiver hospedado no próprio pfSense) deve ter uma API para atualizar o registro TXT automaticamente. Por sorte o pacote ACME do pfSense implementa algumas APIs automaticamente, entretanto algumas podem não funcionar corretamente.

Desafios gerais

Caso o pfSense seja firewall de um IP dinâmico, é preciso que, cada vez que o IP mude, o servidor de DNS aponte para o novo endereço. O serviço de DNS utilizado deve ter alguma ferramenta para atualização do DNS através de uma API ou algo do gênero. A este tipo de serviço chama-se de DynDNS ou Dynamic DNS.

Minha experiência e passo-a-passo

Criei uma conta no ClouDNS e criei um nome de domínio gratuito.

Criei uma conta no Digital Ocean e criei uma zona de DNS com o nome de domínio criado no ClouDNS.

Criei um subdomínio do nome de domínio criado no ClouDNS e apontei os registros NS para os da Digital Ocean

Passei a utilizar a Digital Ocean como servidor DNS. Eles tem boa integração com o pacote ACME do pfSense.

Referências

Documentação oficial fo pfSense Netgate do pacote ACME
https://docs.netgate.com/pfsense/en/latest/packages/acme/index.html

Tutorial ensinando a criar certificados wildcard ou não através do pacote ACME do pfSense
https://www.danielcolomb.com/2019/08/29/creating-wildcard-certificates-on-pfsense-with-lets-encrypt/

Tutorial ensinando a criar certificados através do pacote ACME do pfSense
https://blog.devita.co/pfsense-to-proxy-traffic-for-websites-using-pfsense/

You should also read:

OpenVPN + pfSense

Ao se conectar em uma OpenVPN (como cliente), recebe-se do servidor um endereço de DNS para usar como padrão, forçado-o a substituir o…

Instalando Emby Server no PfSense

Descobrindo a versão do FreeBSD no PfSense freebsd-version -k Explorando o repositório de arquivos do FreeBSD http://pkg.freebsd.org/ Emby Server no repositorio FreeBSD https://www.freebsd.org/cgi/ports.cgi?query=emby-server&stype=all…

Testando IPSec com o PfSense

Neste tutorial configuraremos dois servidores pfsense para interligarem duas redes (site-to-site VPN) através do protocolo IPSec com túnel nativo (sem GRE) usando esquema…