Mit dem Programm kannst du gültige S/MIME Schlüssel und Zertifikate selbst erstellen. Getestet unter Windows und iOS kannst du E-Mails signieren und verschlüsseln.
Benötigt wird ein Linux System mit OpenSSL, mit etwas Anpassung kannst du die OpenSSL Aufrufe auch unter Windows nutzen. Ich selbst nutze OpenSSL 1.0.2g-fips unter Ubuntu Linux 16.04 LTE.
S/MIME Zertifikat erstellen per Script
Kopiere das folgende Shell Programm auf deinen Linux Host und gib ihm mit chmod +x create_SMIME_p12.sh das Attribut für die direkte Ausführung.
#!/bin/bash # # create_SMIME_p12.sh (c) 2017, Andreas Schuster # read -p "Accountname (z.B. mmustermann):" account mkdir ${account} cd ${account} cat >${account}.cnf <<-EOF [ req ] default_bits = 2048 distinguished_name = req_distinguished_name string_mask = utf8only [ req_distinguished_name ] countryName = Land (2 Zeichen, z.B. AT, DE, CH) countryName_default = AT countryName_min = 2 countryName_max = 2 localityName = Ort bzw. Stadt (z.B. Wien) localityName_default = Wien 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Meine Firma commonName = Dein Name (z.B. Max Mustermann) commonName_default = Andreas Schuster [Verschlüsselt.IT] commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ usr_cert ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer subjectAltName=email:move [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth,emailProtection EOF ### Generiert einen Schlüssel für den Benutzer, Schlüsseldatei ist mit einem Passwort geschützt echo "Ein neuer Schlüssel für den Benutzer <${account}> wird generiert..." openssl genrsa -des3 -out ${account}.key 2048 ### Speicherung der Schlüsseldatei ohne Passwort, unsicherer im Backup, aber besser für ein späteres Recovery ;-) echo "Der Schlüssel wird nun ohne Passwort gespeichert..." openssl rsa -in ${account}.key -out ${account}.nopass.key ### Ein Certificate-Signing-Request wird mit den Parametern des Config-File erstellt echo "Der Zertifikatsantrag (CSR) wird erstellt..." openssl req -new -key ${account}.nopass.key -out ${account}.csr -config ${account}.cnf ### Optional: Ausgabe des Certificate-Signing-Request zur Kontrolle durch den Administrator echo "Dies ist der Inhalt des Zertifikats..." openssl req -text -noout -in ${account}.csr ### Generierung eines Self-Signed Zertifikates mit XX Jahren Laufzeit echo "Das selbst-signierte Zertifikat mit Windows kompatiblen EFS-Eigenschaften wird erstellt..." tage=365 jahre=5 laufzeit=`expr $tage \* $jahre` openssl x509 -req -days ${laufzeit} -in ${account}.csr -signkey ${account}.nopass.key -out ${account}.crt -extensions v3_req -extfile ${account}.cnf ### Erstellung einer .P12/.PFX Datei, die am Windows Client importiert werden kann echo "Die .P12/.PFX Datei (X.509 Zertifikat + privater Schlüssel) wird erstellt..." openssl pkcs12 -export -in ${account}.crt -inkey ${account}.nopass.key -out ${account}.p12
So sieht das Ergebnisverzeichnis aus:
Windows Nutzung
Nach der Ausführung des Scripts hast du in dem Unterverzeichnis die .p12 Schlüsseldatei die auch das X.509 Zertifikat beinhaltet. Die Datei kannst du unter Windows per Doppelklick direkt in den Windows Zertifikatsmanager installieren. Wenn das Zertifikat bei der Benutzung als nicht gültig angezeigt wird, öffne den Windows Zertifikatmanager per Ausführen certmgr.msc und wähle den Pfad „Zertifikate – Aktueller Benutzer“ -> „Eigene Zertifikate“ -> „Zertifikate“. Wähle das eben importierte Zertifikat und nutze „Kopieren“ über die rechten Maustaste. Dann den Pfad „Vertrauenswürdige Personen“ -> „Zertifikate“ auswählen und dort mit der rechte Maustaste -> „Einfügen“ die Vertrauensstellung erstellen.
iOS Nutzung
Wähle dein E-Mailprogramm und sende die .p12 Datei an eine E-Mail Adresse die du am iPhone empfangen kannst. Am iPhone öffne den .p12 Anhang und importiere den Schlüssel mit Benutzerzertifikat als iOS Profil. Unter „Einstellungen“ -> „Mail, Kontakte, Kalender“ -> „{E-Mail-Kontoname}“ -> „Account“ -> „Erweitert“ -> (ganz unten) „S/MIME“ kannst du dann die automatische Signatur und Verschlüsselung auswählen. Dann kannst du das eben importierte Zertifikat auswählen.
Technische Einschränkungen
Das selbst erstellte Zertifikat ist ein sogenanntes „Self-signed Certificate“, das bedeutet, dass externe Empfänger von mit diesem Zertifikat signierten Nachrichten eine Warnung erhalten, dass das Zertifikat aus einer nicht vertrauenswürdigen Quelle stammt. Dies kann nur vermieden werden, wenn der Empfänger deinem Zertifikat per Knopfdruck vertraut, oder du ein S/MIME Zertifikat bei einem Trust Center, oder in neuer Namensgebung einem Zertifikat-Dienste-Anbieter (ZDA) kaufst. Gerne empfehle ich dir passende ZDAs für deinen Anwendungsfall.
Funktioniert dein S/MIME Zertifikat? Gerne stehe ich als Testperson für E-Mail Signatur und Verschlüsselung über meine E-Mail-Adresse andreas[ÄT]verschluesselt.it zur Verfügung!
Hallo Andreas,
sehr gute Anleitung die bei mir sofort funktioniert hat. Stell doch deinen öffentlichen Schlüssel hier auf der Seite zur Verfügung, dann kann ich dir in Zukunft auch immer sicher Schreiben 😉
Mit dieser Anleitung sind Glenn-Greenwald und Pre-Snowden Probleme kein Problem, und die Anleitung ist einfacher als die Volksverschlüsselung.
Gut gemacht – weiter so!
Hallo Daniel,
gute Idee, das werde ich in den nächsten Tagen machen.
viele Grüße, Andreas
Hallo Andreas,
sehr gute Anleitung zu einem sonst sehr schweren Thema. Hat Spaß gemacht den Artikel zu lesen 🙂
Stell doch dein Zertifikat auch auf die Seite, dann haben wir keinen Pre Snowden Glenn Greenwald Test (https://de.wikipedia.org/wiki/Glenn_Greenwald) Probleme und können immer sicher Kommunizieren.
Freu mich schon auf den nächsten Beitrag zu dem Thema
Hallo Andreas,
Das Problem mit dem „Self-Signed“ Zertifikat kann man auch umgehen wenn man ein kostenloses Zertifikat nutzt, das „Public Trusted“ ist.
Da gibt es z.B. StartSSL (https://www.startssl.com/Support?v=1)
oder für Web-Server-Zertifikate lässt sich auch Let’s Encrypt Nutzen (https://letsencrypt.org/).
Mit persönlich gefallen solche alternativen, da ich es absurd finde mehrere hundert Euro für ein Zertifikat auszugeben….
lg
Michael
Hallo Michael,
die von dir beschriebenen kostenlosen Zertifikate sind SSL Zertifikate in der Regel für Webserver also https Verbindungen. Ich denke auch, dass für Privatnutzer oder Kleinunternehmen StartSSL und jetzt neu Let´s Encrypt eine gute Wahl ist.
Die Zertifikate kann man nur leider nicht für S/MIME Email-Verschlüsselung nutzen, da gibt es meines Wissens nach keinen kostenfreien Anbieter der eine vernünftige Laufzeit von 2-3 Jahren für das Zertifikat anbietet. Ich habe schon freie S/MIME Demo Zertifikate für 30 Tage oder so gesehen, aber das bringt ja nichts wenn man in einer Regelmäßigkeit verschlüsseln möchte. Wenn man nicht groß investieren möchte kann man sich mit der o.a. Anleitung ein 5 Jahres S/MIME Zertifikat erstellen und nach manueller Bestätigung des Empfängers auch zuverlässig nutzen. 🙂
Sichere Grüße!
Andreas
Das erstellte Zertifikat ist mit dem EM Client leider nicht kompatibel. Kann das jemand bestätigen?
EM Client ist ein Email-Client
siehe http://de.emclient.com/
Hallo Marcel,
eine wirklich gute Frage. Ich habe mich primär auf auf die Outlook Prüfung fokussiert.
Es ist aber auch wirklich wichtig was du bei den Fragen während der Zertifikatserstellung eingibst. Die meisten Felder müssen gefüllt sein, speziell die Frage an deiner Email Adresse ist kritisch, da jeder Email-Client das S/MIME Zertifikat an der darin gespeicherten Email-Adresse identifiziert.
Erzeugt wird ein RSA2048 Zertifikat mit SHA1 oder SHA256 Hash (je nach deiner openssl.cnf). Das sollte eigentlich jeder E-Mail Client gut verarbeiten können. Kritisch kann es auch bei dem Punkt der unter Technische Einschränkungen steht werden, es handelt sich um ein selbstsigniertes Zertifikat und es gibt darüber keine prüfbare Zertifikatskette. Eventuell versucht der EM Client die Kette zu prüfen und das schlägt fehl.
Hast Du eine Fehlermeldung erhalten?
Sichere Grüße, Andreas
Wer nicht nur ein einzelnes Self-Signed S/MIME-Zertifikat erstellen möchte, sondern eine kleine OpenSSL basierte Root-CA für die Ausstellung mehrere S/MIME-Mail-Anwender (z.B. ein Team) benötigt, dem kann ich meine „klickfertige“ Lösung hier empfehlen: https://github.com/gunnarhaslinger/SMIME-OpenSSL-CA
Hallo Gunnar,
Deine klickfertige CA unter https://github.com/gunnarhaslinger/SMIME-OpenSSL-CA zur einfachen Erstellung von S/MIME Zertifikaten für ein Team ist genial. Speziell die Idee, einfach eine aktuelle OpenSSL als Windows Anwendung portablel einzubinden, um die genötigten Zertifikate zu erstellen ist deutlich besser als diese auf einem Linux mit OpenSSL zu erstellen. Man erspart sich das Problem hat wie man die Dateien unter Linux an die Benutzer verteilt.
Ich sehe den Anwendungsfall klar bei der internen Nutzung von E-Mailverschlüsselung innerhalb von mittelgroßen Arbeitsgruppen, eventuell sogar bis 100-200 Benutzer. Hier kann man auf einem Windows Share (Backup nicht vergessen!) eine kleine CA aufbauen und die Zertifikate manuell an die Benutzer verteilen. Alle Exchange Kunden müssen aber leider die X.509 .crt Zertifikate noch in einem zentralen Adressbuch speichern, da sonst die Benutzer alle S/MIME Empfänger mit ihren Zertifikaten sich selbst abspeichern müssen.
PS: Super Dokumentation in dem GIT. Sehr empfehlenswert für alle die S/MIME unter Windows kennenlernen wollen!
Sichere Grüße, Andreas
Wie muss man das Script ändern, wenn man ein Self Signed RootCA hat?:
basicConstraints = CA:TRUE…
Mein S/MIME-Zertifikat ist abgelaufen. Ich möchte es nur erneuern. Das RootCA ist noch länger gültig. Das Script mit CA:TRUE läuft korrekt durch:
…
Das selbst-signierte Zertifikat mit Windows kompatiblen EFS-Eigenschaften wird erstellt…
Signature ok
subject=C = DE, L = MeineStadt, O = Private, CN = Vorname Nachname, emailAddress = emailadresse@###.##
Getting Private key
Die .P12/.PFX Datei (X.509 Zertifikat + privater Schlüssel) wird erstellt…
Enter Export Password:
Verifying – Enter Export Password:
benutzer@rechner:~/Downloads$
Keine Fehlermeldung, aber ich kann keine der erstellten Dateien finden, weder als Benutzer, noch als sudo (Ubuntu 18.04). Was ist schiefgelaufen?
Hallo Gerd,
mit dem Befehl:
openssl pkcs12 -export -in ${account}.crt -inkey ${account}.nopass.key -out ${account}.p12
wird die .p12 Datei erzeugt. Du kannst den Befehl auch jederzeit nachträglich aufrufen.
Hast Du eine Datei *.crt und *.nopass.key (* entspricht einem Usernamen) in dem Verzeichnis nach dem Script? Wenn ja rufe den openssl pkcs12 doch einfach mit den zwei Dateien direkt auf. Die Ausgabedatei ist username.p12
Sichere Grüße, Andreas
Danke für die Anleitung!
Ich habe sie sowohl auf Linux aus auch in Cygwin ausprobiert. Zuerst erhielt ich irritierende Fehlermeldungen, die ich aber schnell darauf zurückführen konnte, dass ich die Datei mit dem Skript auf einem Windows-Computer erstellt hatte. dos2unix das Problem gelöst.
Leider hat Thunderbird 102.6.1 (64-Bit) unter Windows ein Problem: Nach dem Import des Zertifikates ist S/MIME beim Verfassen einer neuen eMail aktiv. Sobald ich aber die Option „Digital unterschreiben“ aktiviere, verweigert Thunderbird den Versand der Mail und sogar das Abspeichern als Entwurf:
„Sie haben ausgewählt, diese Nachricht digital zu unterschreiben, aber die Anwendung konnte das Unterschriftszertifikat nicht finden, das Sie in Ihren Konten-Einstellungen angegeben haben, oder das Zertifikat ist abgelaufen.“
Abgelaufen ist es jedenfalls nicht. Aber woran kann es liegen, dass Thunderbird das Zertifikat „nicht findet?“ Es wird in der Zertifikatverwaltung von Thunderbird aufgeführt…
Ist ein älterer Post. Kann sein, dass man heute für Thunderbird andere Parameter für die Generierung benötigt.
Sichere Grüße, Andreas