Verschlüsseln mittels ’Let’s Encrypt’ mit Domino?

    Heinz Mathys  20 April 2019 17:59:20
    Einleitung
    Ein SSL-Zertifikat ist in einer Umgebung mit Kommunikation zu anderen Endpunkten (Server oder Client) elementar.
    Dabei kann man entweder auf ein Zertifikat eines Herausgebers verwenden, welcher damit Geld verdient oder eine Open-Source-Alternative verwenden.
    In diesem Artikel soll die Verwendung eines "Let's Encrypt" Zeritifikats für den Web-Server basierend auf Domino eingegangen werden.

    Folgende Schritte müssen durchgeführt werden:
    1.        Zertifikat erstellen (lassen)
    2.        Zertifikat für die Verwendung im Domino-Server bereitstellen
    3.        Zertifikat für den HTTP-Task bereitstellen

    Hinweise:
    • Dieser Artikel nimmt an, dass die lesende Person gewisse Grundlagen zu Zertifikaten aufweist, wie z.B. was ein Public-Private-Key-System ist oder welche Komponenten ein Zertifikat hat.
    • Dieser Artikel nimmt an, dass Domino 10.0.1 FP1 auf CentOS 7 (64bit) installiert ist. Der Domino-Account unter Linux mit "domino" läuft und der User einen Account hat, welcher Befehl als Root durchführen darf (sogenannte "sudoer").
    • Bei Interesse kann der ganze Erstellungs- und Renewal-Prozess automatisiert werden, insbesondere da nun auch mittels Java-Code auf den Service von 'Let's Encrypt' zugegriffen werden kann.

    1. Eigenes Zertifikat erstellen
    Je nach Betriebssystem und Umgebung wird ein Zertifikat unterschiedlich erzeugt.
    In diesem Beispiel verwenden wird hierzu "Certbot" verwendet. Da in CentOS 7 die Verwendung von "Extra Packages for Enterprise Linux" (kurz: EPEL) nicht aktiviert ist, müssen diese beiden Software installiert werden
    sudo yum install epel-release
    sudo yum install certbot
    Nach dieser Installation kann mittels Befehl "letsencrypt" das eigene Zertifikate theoretisch einfach erstellt werden.
    sudo letsencrypt certonly --manual --email yourmailaddress@yourdomain.ch -d yourdomain.ch

    Der Befehl ist so aufgebaut, dass alles selbsterklärend ist. Es gibt einen wichtigen Fallstrick: Damit das Zertifikat erstellt werden kann, wird eine Bestätigung erwartet. Let's Encrypt hat dies so gelöst, dass beim Aufruf von "letsencrypt" ein Gehemeinis (auch "secret" genannt) generiert werden, welches anschliessend auf dem Web-Server abgeholt werden muss. Nach Angaben, ob man Newsletter und/oder IP-Adresse geloggt haben möchte, wird folgendes Angezeigt
    - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Create a file containing just this data:

    KcZKfFu-eZpA8ClsdhoTB1Og5zrnv27P_Aj1L0SyQpQ.5qmT_rGNBJdrip5S_zYpF4PkSfP0Pz4mGQa-hWklOfc

    And make it available on your web server at this URL:

    http://yourdomain.ch/.well-known/acme-challenge/KcZKfFu-eZpA8ClsdhoTB1Og5zrnv27P_Aj1L0SyQpQ

    - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Press Enter to Continue
    Es muss also beim Aufruf der angezeigten URL die Rückmeldung wie oben dargestellt angezeigt werden. Unter openntf.org gibt es ein Tool mit welchem man dies einfach realisieren kann oder man platziert auf dem entsprechenden Web-Server einfach eine entsprechende Redirect-Regel auf eine Text-Datei im Domino-HTML-Verzeichnis. Falls das Geheimnis vom Web-Server bestätigt ist, werden folgende Dateien durch "letsencrpyt" erzeugt:
    1.        cert.pem: Das Server-Zertifikat
    2.        chain.pem: Alle Zwischenzertifikate, sodass anschliessend das Server-Zertifikat validiert werden kann.
    3.        fullchain.pem: Alle Zertifikate, inkl. der Server-Zertifikate, allen Zwischenzertifikate bis hin zum Wurzelzertifikat, sodass eine Validierung erfolgen kann.
    4.        privkey.pem: Privater Schlüssel des Server-Zertifikats
    Der private Schlüssel des Server-Zertifikats muss sicher aufbewahrt werden, wobei der Server für gewisse Ausführungen das Recht haben muss auf diesen privaten Schlüssel zuzugreifen. Dazu mehr später.
    Es müssen nun noch zwei Wurzelzertifikate heruntergeladen werden. In diesem Fall findet man diese unter https://letsencrypt.org/certificates/, wobei man das Wurzelzertifikat "ISRG Root X1 (self-signed)" und das "ISRG Root X1 Valid Certificate" zwingend benötigt, die anderen beiden Wurzelzertifikate für die zurückgezogenen (revoked) und abgelaufenen (expired) Zertifikate empfehle ich ebenfalls herunterzuladen, wobei dies nicht zwingend notwendig ist.

    Als Resultat hat man nun folgende 6 Dateien:
    1.        privkey.pem
    2.        cert.pem
    3.        chain.pem
    4.        fullchain.pem
    5.        isrgrootx1.pem
    6.        letsencryptauthorityx3.pem

    2. Server-Zertifikat in Keyring-Datei integrieren
    In der Keyring-Datei werden verschiedene, immer wieder benötigte Schlüssel abgelegt. In der Regel werden möglichst nur die öffentlichen Schlüssel dort abgelegt, aber da die privaten Schlüssel je nach Situation auch benötigt werden,  verwenden z.B. Programme wie PGP auch sogenante "secret key ring files" mit dem privaten Schlüssel. Der HTTP-Task des Domino-Servers muss für die verschlüsselte Kommunikation Zugriff auf den privaten Schlüssel haben, damit dieser Task beweisen kann, dass er wirklich der richtige Absender (oder Empfänger) ist. Deshalb muss in diesem Beispiel auch der private Schlüssel des Server-Zertifikats in der Keyring-Datei abgelegt werden. Daneben muss in der Keyring-Datei auch die Angaben bis hin zum Wurzelzertifikat hinterlegt werden, damit eine verschlüsselte Kommunikation und Proof-of-Ownership korrekt durchgeführt werden kann.

    In früheren Versionen musste auf dem Domino-Server ein von IBM zur Verfügung gestellt Tool "kyrtool" herunterladen. Mit Domino 10 ist dieses Tool bereits vorhanden.
    Falls man die 6 Dateien z.B. im Ordner "ssl" unterhalb vom Notes-Data-Verzeichnis abgelegt hat, kann somit mit folgenden Befehlen die Keyring-Datei erstellt und mit den notwendigen Zertifikatsinformationen aktualisiert werden:
    /opt/ibm/domino/bin/tools/startup kyrtool create -k /local/notesdata/keyring.kyr -p passwordToTheKeyRingFile
    /opt/ibm/domino/bin/tools/startup kyrtool import -k /local/notesdata/keyring.key -i /local/notesdata/ssl/isrgrootx1.pem
    /opt/ibm/domino/bin/tools/startup kyrtool import -k /local/notesdata/keyring.key -i /local/notesdata/ssl/letsencryptauthorityx3.pem
    /opt/ibm/domino/bin/tools/startup kyrtool import -k /local/notesdata/keyring.key -i /local/notesdata/ssl/privkey.pem -n letsencrypt
    /opt/ibm/domino/bin/tools/startup kyrtool import -k /local/notesdata/keyring.key -i /local/notesdata/ssl/cert.pem
    /opt/ibm/domino/bin/tools/startup kyrtool import -k /local/notesdata/keyring.key -i /local/notesdata/ssl/chain.pem
    /opt/ibm/domino/bin/tools/startup kyrtool import -k /local/notesdata/keyring.key -i /local/notesdata/ssl/fullchain.pem
    Bitte wählt ein gutes Passwort, resp. eine gute Passphrase aus. Dieses Passwort wird zum Verschlüsseln der Keyring-Datei verwendet.

    Als Resultat hat man nun folgende beiden Dateien:
    1.        keyring.key
    2.        keyring.sth
    In der Datei "keyring.sth" ist nun das eben beim Erstellen verwendete Passwort 'verschleiert' hinterlegt. Verschleiert deshalb, weil es mittels etwas Google-Suche schnell klar wird, dass der Inhalt relativ schnell lesbar gemacht werden, da jedes Byte mittels XOR-Operation mit 0xF5 Wert 'nur' maskiert wird. Es ist also eine gute Idee diese Datei sicher aufzubewahren ;-)

    3. Keyring-Datei integrieren
    Nun muss diese Keyring-Datei einfach noch dem HTTP-Task bekannt gemacht werden. Dies kann mittels Angabe des Pfades relativ zum Notes-Data-Verzeichnis auf dem Domino-Server im entsprechenden Internet-Site-Dokument einfach realisiert werden (Punkt 1 im Screen-Shot):
    Image:Verschlüsseln mittels ’Let’s Encrypt’ mit Domino?
    Tipp: Falls man alle Aufrufe von HTTP nun auf HTTPS Umleiten will, kann auch das Redirect gerade am gleichen Ort angepasst werden.
    Nachdem die Anpassungen gemacht wurden, sollte der HTTP-Task mittels "tell http restart" neu gestartet werden (eigentlich sollte auch ein Refresh ausreichen, ich habe jedoch die Erfahrung gemacht, dass ab-und-zu besonders in komplexeren Umgebungen seltsame Seitenphänomene beobachtet wurden).

    Bonus
    Bereits jetzt kann der automatische Renewal-Prozess der Zertifikate getestet und anschliessend automatisiert werden. Hierzu stellt certbot den folgenden Befehl für eine Simulation zur Verfügung:
    sudo certbot renew --dry-run
    Falls dieser ohne Fehler durchläuft, dann kann mittels "cron-job" oder "systemd-job" der Renew-Prozess mehrmals am Tag laufen gelassen werden. Ich empfehle mind. zweimal am Tag die Prüfung durchzuführen. Solange es kein Renewal braucht, macht der Renewal-Prozess auch nichts...

    Linkliste
    1.        Fedora Wiki zu EPEL: https://fedoraproject.org/wiki/EPEL#How_can_I_use_these_extra_packages.3F
    2.        Anleitung zu "certbot", resp.  "let's Encrypt Zertifikat": https://certbot.eff.org/lets-encrypt/centosrhel7-other
    3.        Hilfstool unter openntf.org https://openntf.org/main.nsf/project.xsp?r=project/LetsEncrypt.org%20-%20Free%20SSL%20Certificates%20for%20Domino
    4.        Wiki zu Tool "keyring" von IBM, inkl. Link zum Download für R9: https://www-10.lotus.com/ldd/dominowiki.nsf/dx/kyrtool
    Comments
    No Comments Found