Getestet mit dem Rasberry Pi unter Raspbian 8

Wichtiger Hinweis: Die hier erzeugten Zertifikate funktionieren unter Outlook 2010, Thunderbird, Android (5.1.1) und MacOS. Aber leider nicht unter iOS (getestet unter iOS 9.2). Evtl. kriege ich das noch hin, und überarbeite dann die Anleitung,

Um mit S/MIME E-Mails verschlüsseln zu können, braucht man eine Zertifizierungsstelle (CA), die dann wiederum Zertifikate (bzw. Schlüssel) für die Benutzer (bzw. deren E-Mail Adressen) ausstellt. Wie man sich eine eigene Zertifizierungsstelle anglegt, mit der man dann beliebig viele Schlüssel anlegen kann, zeige ich hier in aller Kürze.

Root-CA anlegen

Also legen wir uns mit Hilfe von openssl eine Root-CA an. Falls openssl noch nicht installiert ist, geht das mit...

apt-get install openssl

Dann müssen wir zuerst ein paar Voreinstellungen für die Schlüsselerstellung vornehmen.

vi /etc/ssl/openssl.cnf

keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth,emailProtection
subjectAltName=email:move

Nun können wir auch schon unsere Zertifizierungstelle (CA) anlegen.

Privaten Schlüssel für die Root-CA anlegen:

openssl genrsa -des3 -out ca.key 4096

Enter pass phrase for ca.key: <BELIEBIGES PASSWORT>
Verifying - Enter pass phrase for ca.key: <BELIEBIGES PASSWORT>

Das Passwort das hier abgefragt wird, muss jedesmal angegeben werden wenn ein neues Zertifikats-Paar für eine Mail-Adresse angelegt wird. Ich würde es also entsprechend komplex wählen!

Zertifikats-Request erzeugen:

openssl req -new -x509 -days 18250 -key ca.key -out ca.crt

Nun die folgenden Abfragen ausfüllen:

Enter pass phrase for ca.key: <DAS EBEN GEWÄHLTE PASSWORT>
Country Name (2 letter code) [AU]: <DEIN LAND>
State or Province Name (full name) [Some-State]:<BUNDESLAND>
Locality Name (eg, city) []:<DEINE STADT>
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<DEINE FIRMA>
Organizational Unit Name (eg, section) []:<ABTEILUNG>
Common Name (e.g. server FQDN or YOUR name) []:<DEINE DOMAIN>
Email Address []:<BELIEBIGE MAIL-ADRESSE>

Nun erhalten wir zwei neue Dateien, die ca.key und die ca.crt. Die .key-Datei ist der private Schlüssel, den wir auf keinen Fall an andere Personen weitergeben sollten. Die .crt-Datei ist der öffentliche Schlüssel, dieser wird nachher an allen Rechnern importiert, mit denen wir verschlüsselt kommunizieren möchten.

Mit Hilfe der Root-CA können wir nun die privaten und öffentlichen Schlüssel für die verschiedenen Mail-Empfänger anlegen.

Schlüssel für eine E-Mail Adressen anlegen 

Privaten Schlüssel für das Mail-Zertifikat anlegen:

openssl genrsa -des3 -out cert.key 4096

Enter pass phrase for cert.key: <BELIEBIGES PASSWORT>
Verifying - Enter pass phrase for cert.key: <BELIEBIGES PASSWORT>

Zertifikats-Anforderung erzeugen:

openssl req -new -key cert.key -out cert.csr

Enter pass phrase for cert.key: <PASSWORT VON EBEN>
Country Name (2 letter code) [AU]:<DEIN LAND>
State or Province Name (full name) [Some-State]:<BUNDESLAND>
Locality Name (eg, city) []:<DEINE STADT>
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<DEINE FIRMA>
Organizational Unit Name (eg, section) []:<ABTEILUNG>
Common Name (e.g. server FQDN or YOUR name) []:<VOR- UND NACHNAME>
Email Address []:<E-MAIL ADRESSE>

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<ENTER DRÜCKEN>
An optional company name []:<ENTER DRÜCKEN>

Den Zertifikats-Request an die CA weitergeben und unterschreiben lassen von der CA:

openssl x509 -req -days 18250 -in cert.csr -CA ca.crt -CAkey ca.key -set_serial <DEZIMALE ZUFALLSZAHL> -out cert.crt

Enter pass phrase for ca.key: <PASSWORT DER CA, WELCHES OBEN ANGEBEN WURDE>

Damit wird der öffentliche Schlüssel mit einer Gültigkeit von 50 Jahren erzeugt. Bei der Seriennummer ("-set_serial") sollte man eine Zufallszahl wählen. Denn wenn man über die gleiche Zertifizierungsstelle (CA) mehrere Zertifikate mit der gleichen Seriennummer anlegt, kann es zu Problemen beim Import der Schlüssel kommen.

Nun noch ein:

openssl pkcs12 -export -in cert.crt -inkey cert.key -name "<VOR- UND NACHNAME>" -out cert.p12

Enter pass phrase for cert.key: <PASSWORT WELCHES MAN FÜR CERT.KEY GEWÄHLT HAT>
Enter Export Password: <BELIEBIGES PASSWORT EINGEBEN>
Verifying - Enter Export Password: <BELIEBIGES PASSWORT EINGEBEN>

Nun erhält man die Dateien cert.crt und cert.csr (öffentliche Schlüssel) und cert.key sowie cert.p12 (private Schlüssel). Das Passwort das man hier eingegeben hat, braucht man später um das Zertifikat in das Mail-Programm zu importieren. Den privaten Schlüssel kann man nun in das Mail-Programm seiner Wahl importieren (und hält ihn geheim!), den öffentlichen Schlüssel gibt man seine Freunde/Familie/Kollegen weiter.