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:

CLI Output
CLI Output

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.
    Noch schlecher ist:
    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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.