Inspiriert durch einen Artikel bei gnulinux.ch, bin ich doch sehr neugierig geworden, was es genau mit einem S/MIME-Zertifikat auf sich hat. Insbesondere unter macOS.
Aktuell verschlüssel ich meine Mails per GnuPG, also der andere Weg zu S/MIME, obwohl die Verschlüsselungsmethode die gleiche ist. In beiden Fällen wird von einer asymetrischen Verschlüsselung gesprochen. Dabei wird ein Schlüsselpaar bestehend aus einem öffentlichen und privaten Schlüssel genutzt. Der öffentliche Schlüssel wird fleißig an alle Mail-Empfänger weiter gegeben und der private Schlüssel verbleibt auf dem eigenen Gerät. Ich will das hier nicht weiter vertiefen, es gibt Tonnen an Material im Netz, sogar das BSI hält Informationen vor.
Nur um das Folgende nachvollziehen zu können. Mit dem öffentlichen Schlüssel wird eine Mail inhaltlich verschlüsselt. Nur der Empfänger, also der Eigentümer des öffentlichen Schlüssels, ist in der Lage mit seinem passenden privaten Schlüssel diese Mail wieder zu entschlüsseln. Daher darf dieser nie in fremde Hände geraten. Beide Schlüssel liegen als simple Dateien vor.
Eine weitere schöne Anwendung ist die Signatur einer Mail. Der Versender einer Mail kann mit seinem privaten Schlüssel diese digital unterschreiben. Dabei wird zusätzlich eine Prüfsumme über den gesamten Inhalt der Mail errechnet, der Empfänger ist dann in der Lage mit dem vorliegenden öffentlichen Schlüssel des Versenders die Echtheit der digitalen Unterschrift zu prüfen. Inhaltliche Änderungen, die auf dem Zustellweg passieren, werden sofort sichtbar gemacht.
Hier die Vor- aber auch Nachteile bei einem S/MIME-Zertifikat:
- Eine extra Software-Installation, wie es bei GnuPG der Fall ist, ist nicht notwendig. Die meisten Mail-Programme kommen aus dem Stand heraus mit einem S/MIME-Zertifikat zurrecht.
- Das S/MIME-Zertifikat als solches wird einfach mit einer Mail an den Empfänger weiter gegeben. Wird eine Mail signiert und versendet, wird das S/MIME-Zertifikat - mit dem öffentlichen Schlüssel im Bauch - direkt mitgeschickt. Abhängig vom Mailprogramm wird das S/MIME-Zertifikat automatisch oder mit wenig Aufwand lokal auf Empfängerseite gespeichert.
- Die Echtheit eines S/MIME-Zertifikats wird durch eine zentrale Stelle (Certificate Authority, kurz CA) geprüft. Im einfachsten und auch preisgünstigsten Fall stellt die CA das S/MIME-Zertifikat aus und prüft den Antragsteller über seine Mailadresse (was jetzt nicht einer Personenüberprüfung entspricht).
- Es entstehen Kosten. Zwischen ca. 15 und 25 Euro pro Jahr kostet ein einfaches S/MIME-Zertifikat (ohne Personenprüfung). Es gibt vereinzelt auch kostenlose S/MIME-Zertifikate, aber die sollte man sich genauer anschauen.
In Summe ist die Abwicklung mit einem S/MIME-Zertifikat einfacher im Vergleich zu GnuPG. Dagegen stehen die laufenden Kosten. Denn nicht nur der Versender auch der Empfänger benötigt ein S/MIME-Zertifikat, wenn die Korespondenz verschlüsselt passieren soll. Leider sind GnuPG und S/MIME nicht miteinander kompatibel.
Nun zum Selbstversuch. Ich habe mir ein S/MIME-Zertifikat (gültig für ein Jahr) bei SwissSign und Sectigo ausstellen lassen. Für jeweils eine andere Mailadresse. Es kann auch nur ein S/MIME-Zertifikat zu einer einzigen Mailadresse ausgestellt werden.
Voraussetzung war, dass ich mein Schlüsselpaar lokal auf meinem Rechner erstelle und nicht bei der CA selbst. Sonst hätte die CA meinen privaten Schlüssel und könnte - jetzt exemplarisch - verschlüsselte Mails an mich mitlesen.
Hier die Einzelschritte, die im Terminal mit Hilfe des Programms openssl erledigt werden:
-
Der private Schlüssel
Der private Schlüssel wird wie folgt lokal angelegt:#> openssl genrsa -out private.key -des3 4096
Die Parameter genrsa zusammen mit der Zahl 4096 ergeben später einen RSA-Schlüssel mit der entsprechenden Schlüssellänge. Der Parameter -des3 fordert dazu auf diesen privaten Schlüssel mit Hilfe einer Passphrase zu schützen. Der private Schlüssel wird dann mit -out in die Datei private.key geschrieben.
-
Generieren eines CSR (Certificate Signing Request)
Der CSR ist quasi das Antragsformular für die CA in Dateiform. Angelegt wird dieser mit Hilfe des privaten Schlüssels, der im vorherigen Schritt angelegt wurde.#> openssl req -new -key private.key -out certificate.csr
Hierbei handelt es sich quasi schon um ein S/MIME-Zertifikat, in dem der öffentliche Schlüssel vom privaten Schlüssel abgeleitet wird. Die Parameter req mit -new fordern openssl dazu auf zusammen mit -key private.key das S/MIME-Zertifikat als CSR in die Datei (-out) certificate.csr zu schreiben. Nur der öffentliche Schlüssel ist dann Bestandteil des CSR.
Beim Erstellungsprozess werden verschiedene Fragen gestellt. Wichtig sind hierbei nur die Angaben "Common Name" und "Email Address", beide werden mit der eigenen Mailadresse für das S/MIME-Zertifikat bestätigt. Die CAs prüfen später während der Erstellung diese Felder ab und ignorieren überflüssige Details.
-
Aussuchen einer CA
Da ich ja selbst meinen privaten Schlüssel lokal erstelle, erfolgt die Antragsstellung bei einer CA mit Hilfe des CSR. Dies sollte auch so unterstützt werden. Bei meiner Suche bin ich auf SwissSign und Sectigo gestoßen die den Weg über ein CSR unterstützen. Es gibt aber unzählige solcher Dienstleister, meine Wahl war ein reiner Zufall und ich wurde auch nicht von denen unterstützt.Das Vorgehen war bei beiden fast gleich. Erst erfolgt der Kauf des S/MIME-Zertifikates über den Shop, um dann die Prozedur mit der Erstellung des S/MIME-Zertifikates zu starten. Wichtig ist darauf zu achten, dass an passender Stelle der Inhalt der eigenen CSR-Datei in das passende Feld eingetragen wird. Sonst passiert ein Automatismus, dass das S/MIME-Zertifikat über den Browser samt privaten Schlüssel erstellt wird. Was ja nicht gewollt ist. Verschiedene Bestätigungsmails im Dialog überprüfen dann die Gültigkeit der eigenen Mailadresse, daher sollte diese schon funktionierend vorliegen.
Ist die Prozedur abgeschlossen wird das S/MIME-Zertifikat in verschiedenen Dateiformaten zum Herunterladen angeboten. Mindestens aber eine .crt-Datei.
-
Das von der CA ausgestellte und signierte S/MIME-Zertifikat
Das von der CA ausgestellte und signierte S/MIME-Zertifikat liegt nun vor. Jetzt fehlt der letzte Schritt, den privaten Schlüssel mit in das standardisierte X.509-Zertifikat zu bringen und in ein passendes Datei-Format (PKCS#12) zu überführen. Zum Schluss wird noch nach einer Passphrase zum Schutz des S/MIME-Zertifikates verlangt.#> openssl pkcs12 -in my.crt -inkey private.key -export -out my_certificate.p12
Info: Das fertige Bundle war zum aktuellen Zeitpunkt vom Format her inkompatibel, um es unter macOS Ventura in den Schlüsselbund zu bringen. macOS Ventura selbst liefert openssl in der Version 3 aus. Das Zusammenführen muss also in einer kleineren Version erfolgen, damit die Schlüsselbundverwaltung das eigene S/MIME-Zertifikat aufnimmt. Dies erfolgt mit dem Parameter -legacy.
#> openssl pkcs12 -in my.crt -inkey private.key -export -legacy -out my_certificate.p12
Ich würde erst das neue Format vorziehen und erst bei Problemen mit der legacy Option das Paket neu erstellen. Oder beide Versionen vorhalten, um das S/MIME-Zertifikat in unterschiedlichen Betriebssystemen konform nutzen zu können.
Das vollständige S/MIME-Zertifikat liegt nun vor und kann unter macOS per Doppelklick in die Schlüsselbundverwaltung gebracht werden. Das Apple eigene Mail-Programm erkennt dies automatisch und bietet am Ende der Betreffzeile zwei neue Schalter zum Signieren und Verschlüsseln (wenn das S/MIME-Zertifikat des Empfängers vorliegt) an.
Mein Tipp wäre, alle Zertifikats-Elemente die angelegt wurden, also der private Schlüssel, sämtliche von der CA zur Verfügung gestellten Zertifikats-Formate und zuletzt das fertige S/MIME-Zertifikat in eine Passwortverwaltung, als Beispiel KeePassXC, zu packen. Dazu die Zugangsdaten zu den CA-Online-Konten, weil dort neben der allgemeinen Kontoverwaltung auch die Zertifikats-Rückrufmöglichkeiten (für eine Ungültigkeitserklärung) zur Verfügung gestellt werden.
[Update 02.01.2023]
Jetzt in der Praxis hat sich gezeigt, dass das Zertifikat von Sectigo lokal unter macOS (in der Schlüsselbundverwaltung), als auch beim Mail-Empfänger als ungültig deklariert wird.
Ein Zeichen dafür, dass das Root-Zertifkat von Sectigo nicht im Betriebssystem vorliegt, um z.B. durch eine Anwendung (Mail) eintreffende Zertifikate prüfen zu können.
Ich habe daraufhin den Service von Sectigo angeschrieben, eine Antwort wird vermutlich in den nächsten Tagen vorliegen.
[Update 10.01.2023]
Der Support von Sectigo konnte mir nicht helfen. Ich bin vom Kauf zurück getreten.
Bild-Quelle(n):
- Titelbild - Verschiedene alte Schlüssel mit einem Etikett auf einer Tischplatte nebeneinander gelegt. - Skitterphoto CC0