LetsEncrypt Zertifikat als Proxy-Zertifikat auf Watchguard Firebox

Ziel

Setup eines kostenfreien SSL-Zertifikates zum Testen des TLS-Proxies auf einer Watchguard. Für den weiteren Artikel wird hier @mail.meinedomain.de@ als Hostname vorausgesetzt.

Voraussetzung

  • DNS konfiguration: mail.meinedomain.de muß im DNS als A-Record und PTR-Record auflösbar sein
  • WWW-Konfiguration: http://mail.meinedomain.de/ muß auf einen Webserver zeigen, auf den man Zugriff hat, um die Authorisierungs-Dateien zu hinterlegen

Beispiel mit letsencrypt docroot

Zunächst wird eine Policy in der Watchguard angelegt: ANY => SNAT:80 => zeigt auf den Linux-Server.

Auf dem Linux-Server muß Letsencrypt installiert sein. Wer zunächst das letsencrypt testen möchte, verwendet die Staging-URL https://acme-staging.api.letsencrypt.org/directory anstelle der Live-acme-V01 URL.  Damit kann man das Letsencrypt Setup testen, ohne in die Rate-Limits der Zertifikats-Stelle zu fallen.

Beantragen des Zertifikates

./letsencrypt-auto certonly --webroot -w /pfad/zum/documentroot/ -d mail.meinedomain.de --server https://acme-v01.api.letsencrypt.org/directory

Hierbei werden temporär unter dem webroot in .well-known/acme-challenge/ die Verifikations-Dateien abgelegt, daher benötigt man natürlich auch Schreibrechte dort. Die fertigen Zertifikate landen dann in einer Directory-Struktur unter /etc/letsencrypt/…, unter live/ liegen Symlinks auf das jeweilige aktuelle Zertifikat.

/etc/letsencrypt/live/mail.meinedomain.de/cert.pem
/etc/letsencrypt/live/mail.meinedomain.de/chain.pem
/etc/letsencrypt/live/mail.meinedomain.de/fullchain.pem
/etc/letsencrypt/live/mail.meinedomain.de/privkey.pem

fullchain.pem ist beispielsweise die Datei für einen nginx, während cert, chain und privkey für den Apache benötigt werden.

Beispiel mit letsencrypt manual

falls man die letsencrypt Software nicht direkt auf dem Webserver installieren kann, kann man den manual mode verwenden, hierzu erstellt man das Zertifikat manuell:

openssl req \
 -new -newkey rsa:2048 -sha256 -nodes \
 -keyout privkey1.pem -out signreq.der -outform der \
 -subj "/C=UK/ST=Bundesland/L=Musterhausen/O=Technik/emailAddress=postmaster@meinedomain.de/CN=mail.meinedomain.de" \
 -reqexts SAN

und gibt den CSR dann per Letsencrypt weiter

letsencrypt certonly \
 --authenticator manual \
 --server https://acme-v01.api.letsencrypt.org/directory --text \
 --email postmaster@meinedomain.de \
 --csr signreq.der

für jeden Zertifikatsnamen wird man dann aufgefordert, eine Datei in das .well-known/ Verzeichnis zu legen.

Achtung: der Account hnter der E-MailAdresse sollte unbedingt Mails empfangen können.

Installation der Zertifikate auf die Watchguard

Die Installation der Zertifikate auf die Watchguard ist etwas tricky, da Letsencrypt bisher nicht in allen Browsern verankert ist und daher deren Root-Authority von einer anderen CA cross-signiert wurde. Daher müssen auf die Watchguard eine ganze Reihe von Zertifikaten installiert werden, und das in der richtigen Reihenfolge. Hierzu verwendet man den Firebox System Manager und editiert die Zertifikate (View->Certificates).

import-cert

 

Über den Import Certificate Button, anwählen von “IPSEC/Web Server/Other” kann man die Zertifkate importieren.

Es sind dies in dieser Reihenfolge:

* DST Root CA X3 (https://www.identrust.com/certificates/trustid/root-download-x3.html) (hier muß ggf. der Anfangs (—–BEGIN CERTIFICATE—–) und Ende (—–END CERTIFICATE—–) Marker hinzugefügt werden.
* ISRG Root X1 (https://letsencrypt.org/certs/isrgrootx1.pem.txt)
* Let’s Encrypt Authority X1 (https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem.txt)

Was genau passiert hier?

zunächst wird das DST Root Zertifikat auf die Box geladen (Root-Zertifikat von IdentTrust), anschließend das ISGRoot-Zertifikat der Letsencrypt Authority. Danach das cross-signierte Zertifikat, für das die beiden anderen vorher existieren müssen. Mit dem letzten Zertifikat wurde schließlich unser mail.meinedomain.de Zertifikat signiert.

Zum Schluß wird also das mail.meinedomain.de Zertifikat auf die Box geladen. Achtung: Hier muß nicht nur das Zertifikat hochladen werden, sondern auch der Private-Key. Am besten beides zusammen in das Import-Paste-Window einfügen. Als Zertifikatstyp wird nun Proxy Server ausgewählt.

 

Aktivieren von TLS im SMTP-Proxy

im der Incoming-SMTP-Proxy-Policy wird nun TLS aktiviert. Bitte gleich darauf achten, SSL2 abgeschaltet zu lassen – das kann inzwischen nicht mehr als sicher betrachtet werden. Wenn nun ein connect auf den entsprechenden Mailserver erfolgt, wählt die Watchguard gemäß der Antwort des dahinterstehenden Mailservers (220 mail.meinedomain.de ESMTP) das entsprechende Zertifikat.

enable-tls

Im unteren Bereich können nun noch Regeln hinterlegt werden, an welche Ziel-Domains oder von welchen Sender-Domains TLS verwendet werden soll. Die Einstellungen reichen hierbei von “kein TLS verwenden” bis hin zu “TLS erzwingen”. Somit kann beispielsweise sichergestellt werden, daß der Kommunikationskanal zu einem Empfänger verschlüsselt ist. Das ersetzt natürlich keine saubere Ende-Zu-Ende Verschlüsselung, ist aber sicherlich besser als keine Verschlüsselung.
Wählt man oben noch die OCSP-Validation an, so wird beim Aufbau der kommunikation das SSL-Zertifikat des Ziel-Servers validiert und bei einem ungültigen Zertifikat abgelehnt. Weitere Informationen hierzu finden Sie in den Watchguard-Hilfe-Dokumenten.

Prüfung des Setups

Von einem externen Linux-Server kann man das Setup wie folgt prüfen:

openssl s_client -starttls smtp -connect mail.meinedomain.de:25
die Antwort enthält dann Dinge wie:

CONNECTED(00000003)
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X1
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/CN=mail.meinedomain.de
 i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
 1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
 i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFXjCCBEagAwIBAgISAfc7Q9N4B0X+lNCJfc9C0Sz3MA0GCSqGSIb3DQEBCwUA
[...]
stInAEa1hihz/Ls0eEapthU2YPFaC5KYb8GMIZcDjKBoIA==
-----END CERTIFICATE-----
subject=/CN=mail.meinedomain.de
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X1
[...]

Der vermutlich auftretende Fehler “unable to get local issuer certificate” kann ignoriert werden; um dies zu fixen, müßten auf der entsprechenden Linux-Box auch noch zusätzlich alle signierenden Zertifikate hinterlegt werden, insbesondere das Let’s Encrypt Authority X1 Zertifikat.

Korrekterweise wird hier also angemäkelt, daß einem der Signatur-Zertifikat nicht vertraut werden kann, weil es nicht im Lokalen Zertifikatsspeicher vorhanden ist. Das ist letzlich auch der Grund warum sich letsencrypt um eine Cross-Signatur von Identtrust bemüht hat.

Offizielles Zertifikat

Auch wenn das Setup mit Letsencrypt der Watchguard Firebox ein offizielles Zertifikat gegeben hat, empfehlen wir für die Verwendung als Mailgateway trotzdem ein kostenpflichtiges Zertifikat. Die Zertifikate von letsencrypt sind auf 3 Monate Limitiert, während offizielle Zertifikate über mehrere Jahre laufen. Man erspart sich somit die Arbeit, das Zertifikat regelmäßig alle 8-10 Wochen zu tauschen. Bei den aktuellen Zertifikatspreisen von anderen Zertifizierungsstellen eine durchaus zu empfehlende Option.

Falls Sie Unterstützung im Bereich SSL-Zertifikate benötigen, sprecheen Sie uns bitte an.

2 Kommentare zu “LetsEncrypt Zertifikat als Proxy-Zertifikat auf Watchguard Firebox”

    1. Werner Maier Post Author

      Es gibt die Möglichkeit, die Zertifikate auch via CLI zu installieren. Die Syntax lautet:
      import certificate ipsec-web-server-other from
      <ftp> FTP file(UTF-8 encoding) transfer
      <tftp> TFTP file(UTF-8 encoding) transfer
      console Console terminal

      bei “from console” muß dann natürlich der private key wieder dabei sein. Und selbstverständlich gilt: die volle Zertifikats-Kette muß zunächst auf der Box sein (root, intermediate, (intermediate2), … etc. – wie beim installieren per Firebox System Manager).
      Beispiel (hier für einen SMTP-Proxy-Server):

      WG#import certificate proxy-server from console
      paste certificate below, then ^D to complete; or ^C to abort
      -----BEGIN PRIVATE KEY-----
      [...]
      -----END PRIVATE KEY-----
      -----BEGIN CERTIFICATE-----
      [...]
      ----END CERTIFICATE-----
      <Cntrl-D>
      WG#

      Das Ganze müßte dann am besten per expect-Script gebaut werden, siehe hierzu unseren anderen Artikel
      Reboot der Watchguard via Script

Leave a Reply

Your email address will not be published. Required fields are marked *