In den bisherigen Artikeln dieser Serie ging es um die Verschlüsselung von Mailverbindungen. Nun geht es um die Signierung (in diesem Teil) und die Verschlüsselung (im nächsten Teil) der eigentlichen Inhalte. Dazu verwenden wir X.509-Zertifikate, die für den jeweiligen Benutzer ausgestellt werden. Mit diesen User-Zertifikaten können wir folgendes tun:
- Signieren eigener E-Mails (der Absender signiert mit seinem Private Key, und der Empfänger prüft die Signatur mit dem Public Key des Absenders).
- Ver- und Entschlüsseln von E-Mails (der Absender nutzt den Public Key des Empfängers für die Verschlüsselung, der Empfänger verwendet den Private Key zur Entschlüsselung).
Damit man praktisch mit User-Zertifikaten arbeiten kann, sollte man zwei Mailaccounts (dh unterschiedliche Mailadressen haben), welche je ein eigenes Zertifikat erhalten. Im folgenden sollen die beiden “test1@example.com” und “test2@example.com” heissen.
Erstellen der User-Zertifikate
Benutzer sollten im Prinzip ihre Schlüssel und CSRs selbst erstellen, damit die Vertraulichkeit auch gegenüber der CA (respektive dem CA-Administrator) gewährleistet ist. Wir halten das Beispiel hier aber einfach, indem die CA auch gleich Schlüssel und CSR erstellt:
openssl genrsa -out usrcerts/test1.key.pem 1024
openssl req -config conf/usr.cnf -new -key usrcerts/test1.key.pem -out usrcerts/test1.csr.pem
Wie gehabt stellt die CA basierend auf dem CSR das Zertifikat aus (wobei wir nun die User-CA verwenden):
openssl ca -config conf/usr.cnf -in usrcerts/test1.csr.pem -out usrcerts/test1.cert.pem
Erstellen der PKCS#12-Datei
Damit Anwender das Zertifikat und den privaten Schlüssel in ihren Mailclient oder ihren Browser einfügen können, benötigt man eine Datei im sogenannten PKCS#12-Format. Diese Datei wird die folgenden Objekte enthalten:
- Den privaten Schlüssel des Benutzers
- Das für diesen privaten Schlüssel generierte Benutzerzertifikat
- Das CA-Zertifikat, welches das Benutzerzertifikat ausgestellt hat.
Das CA-Zertifikat ist nicht zwingend notwendig. Es ist aber sehr praktisch, denn beim Importieren des User-Zertifikats der PKCS#12-Datei in den Browser oder den Mailclient wird damit auch gleich das CA-Zertifikat importiert.
Da die PKCS#12-Datei den privaten Schlüssel enthält, muss sie entsprechend geschützt werden. In unserem Fall verwenden wir ein Passwort, aber andere Mechanismen sind denkbar. Das Passwort dürfen wir dem Benutzer natürlich nicht in der gleichen Mail wie die PKCS#12-Datei zustellen…
openssl pkcs12 -export -inkey usrcerts/test1.key.pem -in usrcerts/test1.cert.pem -certfile cacerts/usr.cert.pem -out usrcerts/test1.p12
Hier muss man ein Passwort für die .p12-Datei angeben, das wir in den späteren Imports benötigen werden.
Importieren in Thunderbird
Alle Zertifikatsaufgaben erledigt man in Thunderbird unter Edit / Preferences / Privacy / Security / View Certificates (unter Windows liegt das Preferences-Menü unter Tools, und nicht under Edit). Dort können wir einen Benutzer-eigenen Schlüssel importieren:
- “Your Certificates” und “Import”, Auswahl der .p12-Datei.
- Falls ein Passwort zum Schutz des “Software Security Device” konfiguriert ist, wird dieses abgefragt.
- Anschliessend wird das Passwort der .p12-Datei abgefragt.
- Im Certificate Manager findet sich jetzt unter “Your Certificates” das eigene Zertifikat.
In der Spalte “Purposes” steht eventuell “<Issuer Not Trusted>”. Falls das der Fall ist, wurde das CA-Zertifikat ebenfalls mit importiert (das heisst, es war noch nicht vorhanden). Diesen “Issuer Trust” kann man nun festlegen:
- Im Certificate Manager “Authorities” wählen, und in der Liste das User CA-Zertifikat suchen.
- “Edit” öffnet ein kleines Fenster, in dem man (mindestens) “This certificate can identify mail users” angeben sollte.

Damit Thunderbird weiss, für welches Account welches Zertifikat verwendet werden soll, müssen wir das definieren:
- Edit / Account Settings.
- Das gewünschte Account suchen, Security auswählen
- “Select” bei “Digital Signing” wählen und das Zertifikat aussuchen.

Importieren in Lotus Notes
Die Lotus Notes-eigene PKI beruht auf einem eigenen Standard, der auf eine Zeit vor X.509 zurückgeht. Konzeptionell sind sich Notes- und X.509-Zertifikate aber sehr ähnlich. Unabhängig davon kann Lotus Notes sehr gut mit X.509-Zertifikaten umgehen.
Wir importieren das PKCS#12-Paket auf folgendem Weg:
- File / Security / User Security
- Lotus Notes fragt nach seinem eigenen Passwort
- Your Identity / Your Certificates
- “All Internet Certificates” auswählen
- Bei “Get Certificates” den Punkt “Import Internet Certificates”

- Nach dem Auswählen der .p12-Datei fragt Notes nach dem Format (PKCS 12 ist vorausgewählt).
- Danach muss man das Passwort der .p12-Datei angeben.

- Mit “Accept All” (und nochmaliger Eingabe des Notes-Passwortes) wird das User- und das CA-Zertifikat zum Notes ID-File hinzugefügt.
E-Mail signieren
Wenn wir in Thunderbird von test1@example.com an test2@example.com senden, können wir die Nachricht signieren:
- Neue Nachricht schreiben (To: test2@example.com, Subject:, Inhalt etc).
- In Options / Security den Punkt Digitally Sign this Message anwählen.
- In View / Message Security Info sagt uns Thunderbird, zu welchem Empfänger er ein gültiges Zertifikat “kennt”.
Hier sollte “not found” stehen, da “test1@example.com” das Zertifikat von “test2@example.com” nicht kennt. Falls beide Zertifikate im gleichen Mailprogramm importiert wurden, “kennen” sich die beiden natürlich schon.
- Absenden der Nachricht.
- Im
Sent Ordner kann man den Quelltext der Nachricht inklusive digitaler Signatur ansehen:
Message-ID: <44E0B0B9.9070809@leisi.net>
Date: Mon, 14 Aug 2006 19:19:53 +0200
From:
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.4) Gecko/20060527 SUSE/1.5.0.4-2.1 Thunderbird/1.5.0.4 Mnenhy/0.7.4.0
MIME-Version: 1.0
To: test2@example.com
Subject: bla
Content-Type: multipart/signed; protocol=“application/x-pkcs7-signature”; micalg=sha1; boundary=”——————ms030906000604040903050609”
This is a cryptographically signed message in MIME format.
———————ms030906000604040903050609
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
fasel
———————ms030906000604040903050609
Content-Type: application/x-pkcs7-signature; name=“smime.p7s”
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=“smime.p7s”
Content-Description: S/MIME Cryptographic Signature
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIJ6DCC
BPAwggLYoAMCAQICAwJkzzANBgkqhkiG9w0BAQUFADB5MRAwDgYDVQQKEwdSb290IENBMR4w
[...]
Prüfen von Signaturen
Der Empfänger wird eine – je nach Mailprogramm unterschiedliche – Benachrichtigung erhalten, dass die empfangene Nachricht digital signiert ist und ein bisher unbekanntes Zertifikat enthält. Bei Lotus Notes sieht das so aus:

Wir wählen “Cross Certify”. Beim Öffnen wird in der Statuszeile wie bei mit der Notes-eigenen PKI signierten Mails der Status angezeigt:

In Thunderbird erhalten wir Auskunft über die Signatur unter View / Message Security Info:
