Let’s Encrypt Zertifikat für FortiGate SSL-VPN, VIPs und Admin-UI
Aus meiner Sicht eines der Highlights von FortiOS 7.0 ist der eingebaute ACME-Client, der es ermöglicht, Let’s Encrypt Zertifikate für die FortiGate auszustellen und automatisch zu aktualisieren. Die Zertifikate können für SSL-VPN, Virtual Servers und für die Admin GUI verwendet werden.
Voraussetzungen
DNS
Der Hostname, für den das Zertifikat ausgestellt wird, muss öffentlich auflösbar sein und auf die FortiGate zeigen.
- A-Record:
Verfügt man über eine statische IP Adresse, sollte ein A-Record verwendet werden. - CNAME:
Verfügt man nur über eine dynamische IP Adresse, sollte ein CNAME verwendet werden, der auf den Hostnamen eines DDNS Providers verweist.
Port Konfiguration
Vor der Nutzung des ACME Clients muss der Port (bzw. die Ports) konfiguriert werden, über welches der Client ins Internet kommunizieren soll, z.B. für port1
:
config system acme set interface "port1" end
Verbindung zum ACME Server
Standardmäßig verwendet FortiOS den Server acme-v02.api.letsencrypt.org. Per Ping sollte die Erreichbarkeit vor der Erstellung des Zertifikats geprüft werden:
execute ping acme-v02.api.letsencrypt.org
Zertifikatsrequest
Sind alle Voraussetzungen erfüllt, kann der Request an Let’s Encrypt gestellt werden.
config vpn certificate local edit "ACME_gateway.domain.com" set enroll-protocol acme2 set acme-domain "gateway.domain.com" set acme-email "certadmin@domain.com" next By enabling this feature you declare that you agree to the Terms of Service at https://acme-v02.api.letsencrypt.org/directory Do you want to continue? (y/n) y end
Bis das Zertifikat dann fix und fertig in der GUI verfügbar war, hat’s bei mir ca. 2 Minuten gedauert.
Der Status lässt sich während des Vorgangs über die CLI wie folgt prüfen:
get vpn certificate local details ACME_gateway.domain.com
Der Output sieht dann bei erfolgreich signiertem Zertifikat wie folgt aus:

Service Binding
Über die folgenden CLI Befehle lässt sich das fertige Zertifikat an die einzelnen Services binden.
SSL VPN
config vpn ssl settings set servercert "ACME_gateway.domain.com" end
Virtual Server
config firewall vip edit <vServer-Name> set ssl-certificate "ACME_gateway.domain.com" next end
Admin-UI
config system global set admin-server-cert "ACME_gateway.domain.com" end
Einschränkungen
Zum Zeitpunkt der Beitragserstellung kann das Zertifikat nur für einen Hostnamen oder für eine Wildcard-Domain ausgestellt. Mehrere SANs in einem Zertifikat sind nicht möglich.
Das kann an mehreren Stellen zu Problemen führen:
- SSL-VPN:
Beim SSL-VPN hat man die Möglichkeit, mehrere Portale mittels Realms zu betreiben. Standardmäßig lauten die URLs dann https://<Host/Domain>/<Realm-Name>. Das lässt sich aber ändern, sodass jeder Realm mit einer eigenen Host/Domain-URL aufrufbar ist.
z.B.:
https://gateway.domain.com/sales wird zu https://gw-sales.domain.com/
https://gateway.domain.com/support wird zu https://gw-support.domain.com/
Hier funktionert nur ein Wildcard Zertifikat, welches jedoch zumindet in FortiOS 7.0.x nicht unterstützt wird.
Noch schlecher ist, wenn für einen Realm ein Virtual Hostname konfiguriert ist, z.B.:
https://gateway.domain.com/sales wird zu https://gateway.sales-domain.com/
https://gateway.domain.com/support wird zu https://gateway.support-domain.com/
In diesem Fall kann kein passendes Zertifikat ausgestellt werden. - Virtual Server
Bei Virtual Servern, die ein Host-Header basiertes Loadbalancing machen (also eine VIP, die je nach Host-Header an den passenden Real Server weiterleitet) verhält es sich ähnlich, wie beim SSL-VPN. Das funktioniert nur für eine Domain mit mehreren Hosts per Wildcard-Zertifikat.
Feature verfügbar ab:
FortiOS 7.0
Vielen Dank für den Artikel.
alllerdings sagt
https://docs.fortinet.com/document/fortigate/7.0.0/new-features/822087/acme-certificate-support
The configured ACME interface must be public facing so that the FortiGate can listen for ACME update requests. It must not have any VIPs, or port forwarding on port 80 (HTTP) or 443 (HTTPS).
We kann ich dann eine VIP für ACME-Certificates verwenden?
Hallo Gerald
Ich bin nicht sicher, ob ich deine Frage richtig verstehe, aber gehe mal davon aus, dass du eine VIP per HTTPS mit einem ACME-Zertifikat verwenden möchtest. Wie du selbst geschrieben hast, geht das laut Fortinet eigentlich nur, wenn die VIP einen anderen Port als 80 oder 443 verwendet (also z.B. 8443).
Ich bin mir aber auch nicht sicher, ob der Artikel von Fortinet so 100%ig stimmt, da Let’s Encrypt eigentlich nur Port 80 Inbound benötigt. Zudem habe ich SSL-VPN auf Port 443 getestet (Port 443 ist damit also „belegt“) und das Let’s Encrypt Zertifikat wird trotzdem problemlos erstellt und erneuert.
Gruß
Andreas
Hallo,
erstmal vielen Dank für den Artikel, hat mich schonmal weitergebracht.
Hier wird beschrieben, dass ein Wildcard möglich ist (was für unsere Zwecke perfekt wäre).
Fortinet schreibt: The Subject Alternative Name (SAN) field is automatically filled with the FortiGate DNS hostname. It cannot be edited, wildcards cannot be used, and multiple SANs cannot be added.
Jetzt wäre die Frage kann man mit FortiOS ein LE Wildcard erstellen und nutzen oder nicht ?
Hallo
Danke für deinen Kommentar. Du hast Recht, die Formulierung in meinem Beitrag hat suggeriert, dass Wildcard Zertifikate erstellt werden können. Das geht defacto aktuell nicht, daher habe ich die Formulierung auch etwas angepasst.
Gruß
Andreas