Na začátek je třeba připomenout fakt, že Firewall pfSense disponuje jednoduchou interní certifikační authoritou, která je integrovaná s dalšími službami jako je např. Nginx a OpenVPN. pfSense pro svou správu a konfiguraci používá WebGUI, které je dostupné pomocí SSL. Po instalaci firewallu je vytvořen výchozí self-signed certifikát, pak je tedy nutné v prohlížečích schvalovat výjimky pro certifikát, který nezná. Pokud chceme komfortněji pracovat SSL, je žádoucí tento problém nějak řešit. Jednou z možností je použít certifikát Let's Encrypt.
ACME
Jedná se o protokol pro komunikaci mezi web serverem a certifikační autoritou. Od verze pfSense 2.3.2-p1 existuje ACME balíček, kterým je možné získat a provozovat Let's Encrypt certifikáty. Balíček umožňuje vytvořit Account key a posléze je možné skrze několik metod validace získat certifikát. Vše je plně integrováno do Cert. managera, provede se import Let's Encrypt CA. Získaný certifikát je též uložen v interním správci certifikátů.
Instalace ACME balíčku
Instalace ACME se provádí pomocí System / Package Manager / Available Packages
, vyhledáme řetězec acme a provedeme instalaci kliknutím na zelené tlačítko Install.
pfSense-pkg-acme-0.1.19_1 pfSense package acme
Balíček má zajímavou závislost na php56-ftp, kterou potřebuje jedna z mnoha metod validace při vydávání certifikátu, která je zjevně realizována pomocí php funkcí FTP.
Konfigurace ACME
Po instalaci balíčků se v menu Services
objeví nová volba Acme Certificates
. Tato volba nám poskytuje nastavení klíčů a certifikátů. Prvním krokem k získání certifikátu je vytvoření a registrace Account key. Pomocí tohoto klíče ACME komunikuje se servery Let's Encrypt.
Validační proces
Proces validace je v balíčku rozdělen na dvě metody. DNS-based methods využívající TXT záznam _acme-challenge.router.pfsense.cz. A na File-based methods. Při prvním seznamování se s ACME na pfSense jsem použil metodu DNS-Manual, která vyžaduje vždy před znovu vydáním certifikátu nastavit TXT záznam manuálně, což je velmi nepraktické.
Dalším krokem pro získání certifikátu je jeho konfigurace pomocí ACME pfSense nastavení. Zde si musíme vybrat, jakou metodu validace použijeme. Má doména pfsense.cz
je registrovaná u Active24, ale na podpoře mi sdělili, že žádnou metodu DNS-NSUpdate – RFC2136 neposkytují. Rozhodl jsem doménu pfsense.cz přestěhovat a využít metodu DNS-Cloudflare. K tomuto kroku mi dopomohl článek Ondřeje Caletky.
Vytvořil jsem si účet u Cloudflare a přidal Site pfsense.cz, kde využiji jen službu DNS hosting. U AC24 jsem vytvořil NSSET NSS-CLOUDFLARE-VERA-ZEUS
a nastavil přidělené DNS servery vera.ns.cloudflare.com
a zeus.ns.cloudflare.com
. Výměna NSSET se neobešla bez předchozího vypnutí DNSSEC. Po přesunu domény jsem DNSSEC opět zapnul na straně Cloudflare a nastavil KEYSET
, dle Ondrova popisu. Následně byl můj KEYSET
automaticky vyměněn za AUTO-82Y4PF3278WQ0E83AGYDAIFYR
, který je stejný jako ten, co jsem si nastavil manuálně.
V profilu Cloudflare získáme API Key, který slouží k autentizaci k DNS, kde se v době získání certifikátu vytvoří již zmiňovaný TXT záznam. Ten se po dokončení opět smaže.
Před vydáním certifikátu musíme zřídit A případně CNAME záznam, pro který chceme získat certifikát.
Proces získání certifikátu trvá delší dobu a může být i ovlivněn limity, které při vydávání certifikátů existují. Po úspěšném vydání certifikátu již stačí jen v menuSystem / Advanced / Admin Access
vybrat získaný certifikát. V menuGeneral settings
je možnost zapnout Acme client renewal job. Který zajistí opětovné získání certifikátu, před jeho expirací. Pro plnou funkcionalitu je nutné ještě u nastavení certifikátu natavit akci restartování WebGUI/etc/rc.restart_webgui
s metodou Restart Local Service, pro načtení nově získaného certifikátu.
Certificate Manager
Cert. manager je integrován s balíčkem ACME. Postup, který jsme si popsali zajistil přidání Let's Enctypt CA i certifikátu do správce certifikátů.
Kde nasadit Let's Encrypt
Použití Let's Encrypt certifikátů je vhodné použít tam, kde nechceme schvalovat výjimky. Ale větší význam má tam, kde je pfSense používán jako haproxy.