SelfSignedCert mit SMIME

Selbsterstellte und signierte Zertifikate werden in der Regel nicht für Mail genutzt. Meist finden Sie diese als initiale Zertifikate für einen Webserver, für CodeSigning, für EFS oder einfach zum Spielen. Da solche Zertifikate nicht von einer Zertifizierungsstelle ausgestellt werden, muss jeder, der diese nutzt selbst explizit diese als "Trusted" addieren.

Wichtig:
Verschlüsseln und Signieren hat immer mit Kryptografie und Sicherheit zu tun. Wer seine "Schlüssel" verliert, kommt nicht mehr an die Informationen, selbst wenn die "ihnen" gehören.

Selfsigned Cert mit Mail (SMIME)

S/MIME ist ein von vielen Clients unterstützter Standard. Auch ohne ihr Dazutun könnten Absender ihr Mails digital signieren und ihr Mailsystem würde die Signatur erkennen, prüfen und Unstimmigkeiten melden. Mit dem Zertifikat des Absenders in ihrer Kontaktliste könnten Sie sogar verschlüsseln. Um aber selbst beim Versand zu signieren oder sogar verschlüsselt zu Empfangen, müssen Sie ein Zertifikat besorgen. Der "normale" Weg ist, dass Sie sich ein Zertifikat von einer kommerziellen Zertifizierungsstelle besorgen. Es gibt sogar einige Zertifizierungsstellen, die solche Zertifikate kostenfrei ausstellen.

Kostenfreie Zertifikate sind nicht schlecht, solange die Zertifizierungsstellen nur ihren Public Key signieren. Sollte eine CA aber ihren privaten Schlüssel gleich mit erstellen wollen und ihnen eine PFX-Datei zum Download anbieten, dann würde ich davon Abstand nehmen. Einige Zertifizierungsstellen tarnen „free“ gerne indem die ausgestellten Zertifikate nur wenige Wochen gültig sind. Immer wieder passiert es, dass Zertifizierungsstellen ihr Angebot verändern oder zurückziehen. Trustcenter wurde durch Symantec aufgekauft und in dem Zuge wurden auch kostenfreie SMIME-Zertifikate eingestellt.

Aber vielleicht wollten Sie ja gar nicht, dass ihr gegenüber einer von ihnen gewählten CA vertraut. Denn damit kann jemand auch unfug machen. vgl.

Daher widmet sich diese Seite der Option ein eigenes Mailzertifikat zu erstellen, was vom Empfänger dann natürlich explizit als "vertrauenswürdig" eingestuft werden muss.

Bordmittel für Zertifikate

Ja, man kann tatsächlich allein mit Windows-Bordmitteln und Kommandozeilentools sich eigene Zertifikate erstellen, ohne gleich eine komplette CA aufbauen zu müssen. Aber einfach ist es nicht gerade und eine GUI gibt es noch seltener. Hier ein paar Startpunkte aber ich gehe nicht weiter drauf ein.

  • Office SelfCert
    Microsoft Office installiert das kaum beachtete Programm "SelfCert.exe" mit in das Programmverzeichnis um Zertifikate zur Signierung von Makros zu erstellen. Allerdings können Sie damit nach meinen Erfahrungen kein E-Mail-Zertifikat erstellen. Ich habe es auf meinem PC sogar dreimal gefunden.
C:\Program Files (x86)\Microsoft Office\Office12\SELFCERT.EXE
C:\Program Files (x86)\Microsoft Office\Office14\SELFCERT.EXE
C:\Program Files (x86)\Microsoft Office\Office15\SELFCERT.EXE
C:\>"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\makecert.exe"
Error: Please either specify the outputCertificateFile or -ss option usage: MakeCert [ basic|extended options] [outputCertificateFile]
Basic Options
 -sk  <keyName>      Subject's key container name; To be created if not present
 -pe                 Mark generated private key as exportable
 -ss  <store>        Subject's certificate store name that stores the output
                     certificate
 -sr  <location>     Subject's certificate store location.
                        <CurrentUser|LocalMachine>.  Default to 'CurrentUser'
 -#   <number>       Serial Number from 1 to 2^31-1.  Default to be unique
 -$   <authority>    The signing authority of the certificate
                        <individual|commercial>
 -n   <X509name>     Certificate subject X500 name (eg: CN=Fred Dews)
 -?                  Return a list of basic options
 -!                  Return a list of extended options

Schlicht, es gibt kein einfaches Tool im Windows Lieferumfang und nicht mal Outlook kann sich selbst ein Zertifikat erstellen

SelfCert per PowerShell

Die Windows PowerShell enthält mittlerweile ein Commandlet, um ein Zertifikat zu erstellen und zu installieren.

New-SelfSignedCertificate `
    -Subject "E=<email>,CN=<name>,O=<company>,C=DE" `
    -KeyUsage None `
    -KeyUsageProperty None `
    -TextExtension "2.5.29.37={text}1.3.6.1.5.5.7.3.4" `
    -NotBefore $(Get-Date).AddDays(-1) `
    -NotAfter $(Get-Date).AddDays(365) `
    -CertStoreLocation "Cert:\CurrentUser\My" `
    -KeyLength 4096

PluralSight Self-Cert

Auf der Suche nach einem einfachen Programm oder Skript um auch Anwender einfach ein Zertifikat erstellen zu lassen, bin ich auf das kostenfreie Tool von Pluralsight gestoßen, welches sogar als Source-Code vorliegt. In der einfach gehaltenen GUI können Sie eigentlich nur den X.500 DN angeben. Die Bitlänge ist schon mit 4096bit eingestellt und 10 Jahre Gültigkeit dürfte auch passen.

SelfCert: Create a Self-Signed Certificate Interactively (GUI) or Programmatically in .NET
http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-programmatically-in-net 

Sie sollten auf zwei Dinge achten:

  • Speichern Sie das Zertifikat in "CurrentUser"
    per Default steht dort "Local Computer".
  • Sicheren Sie das Zertifikat
    Denken Sie unbedingt daran das Zertifikat z.B. wie angeboten in eine PFX-Datei zu sichern. Sollten Sie aus irgend einem Grund das Zertifikat mit dem privaten Schlüssel verlieren (z.B. Benutzerprofil defekt, Computertausch, etc.), dann können alle verschlüsselt empfangenen Mails selbst nicht mehr lesen !. Nach heutiger Einschätzung können Sie auch nicht alle 2^4096 Schlüssel durchprobieren.

Und dann los:

Nach einer kurzen Berechnungsphase finden Sie das Zertifikat in ihrem Speicher und die GUI zeigt ihnen folgendes Bild:

Wenn Sie "View Certificate" machen, dann sehen Sie das Zertifikate

Allerdings sehen Sie hier, dass das Zertifikat auch nicht "vertrauenswürdig" ist.

Es reicht bei Windows 7 nicht, das Zertifikat samt privatem Schlüssel im eigenen Benutzerstore zu haben, sondern man muss zumindest das Zertifikat (ohne PrivateKey) im Speicher für "Vertrauenswürdige Stammzertifikate" hinterlegen.

Sie können es zwar vorher schon in Outlook auswählen, aber Outlook wird es erst nutzen, wenn es auch "Gültig" ist.

Danach können Sie aber jede Mail "signiert" versenden.

Ankunft bei...

Ich habe dann Mails mit diesem Selbstzertifikat per SMIME signiert und versendet und geschaut, was davon ankommt und ob ich auch darauf antworten konnte:

  • Net at Work mit NoSpamProxy Encryption
    Zuerst habe ich natürlich eine Mail an meinen Firmenaccount gesendet. Ich habe erwartet, dass das SMIME-Gateway die Mail prüft, ggfls ablehnt oder durchlässt aber das SMIME-Zertifikat natürlich entfernt. Und so ist die Mail dann bei mir auch angekommen
  • Web.de
  • Outlook.com
  • GoogleMail

Zusammenfassung

Hier noch mal die Ergebnisse als schnelle Zusammenfassung:

Ziel Empfang Versand

NoSpamProxy Encryption

Die Signatur der Mail wurde geprüft, das Zertifikat entfernt, damit der Anwender selbst nicht signieren kann und der Prüfbericht zeigt das "Problem" an.

Ich kann antworten aber die Mail kommt nicht verschlüsselt an. Das ist aber auch so eingestellt, da das abgefangene und gespeicherte Zertifikat keinen Vertrauensstatus hat und daher nicht eingesetzt wird.

web.de

Die SMIME-Mail ist ohne Warnung angekommen und ich konnte auch die Signatur prüfen. Allerdings hat WEB.DE nicht vor dem falschen Zertifikat gewarnt. Damit ist diese Funktion natürlich mangelhaft umgesetzt.

Eine signierte Mail sollte im Posteingang z.B. mit einem anderen Icon angezeigt werden, was auch von der Gültigkeitsprüfung abhängig ist und der Anwender sollte die Option haben, das Zertifikat einer signierten Mail in die Kontakte zu übernehmen und so ein Vertrauen einzustellen.

Per Default sollten nicht gültig signierte Mails auf jeden Fall gekennzeichnet werden. Es gibt keinen sichtbaren unterschied zwischen einer "korrekt" SMIME-signierten und einer falsch signierten Mail.

Leider konnte ich in WEB.DE keine Mail signieren. Die Webseite gibt es scheinbar nicht her und auch das Speichern des Absenders als "Kontakt" hat das Zertifikat nicht übernommen. Nur bei DE-Mail kann man ein Zertifikat hinterlegen.

Outlook.com

Eine SMIME-Mail mit einem SelfSigned-Zertifikat an Microsofts neuen Dienst landete erst mal in der Quarantäne. Aber hier ist der SMIME-Support schlicht nicht vorhanden. Weder eine andere Kennzeichnung, Icons noch eine Möglichkeit überhaupt die Signatur zu sehen

Entsprechend fehlt auch beim Versand jegliche Möglichkeit zu signieren.

GoogleMail

Weder in der Übersicht noch in der Mailansicht ist direkt zu sehen, dass hier SMIME verwendet wurde. Die smime.p7s-Mail mit dem Zertifikat ist als Anlage zu sehen

Leider kann man mit GoogleMail per Browser wohl keine Mails per SMIME signieren oder gar verschlüsseln.

Zur Ehrenrettung der meisten Webdienste muss man allerdings sagen, dass diese natürlich auch mit einem "Rich Client" bedient werden können und wenn Sie die Mail z.B. per IMAP4 oder ActiveSync herunter laden, dann können Sie dort die Funktionen abhängig von ihrem Client nutzen.

Zwischenstand

In Zeiten, in denen man einer CA auch nicht mehr vertrauen kann und im Windows Zertifikatsspeicher mittlerweise über 100 RootCAs gelistet werden, die alle "Subordinate"-CAs autorisieren können weitere Zertifikaten mit beliebigen Namen zu erstellen, sehe ich das Vertrauen in eben diese CAs schwinden.

Der Ansatz, den z.B. PGP früher mit dem "Ring of Trust" mangels attraktiver Angebote der Zertifizierungsstellen gefahren hat, kann mit Selbstzertifikaten so nicht weite gefahren werden. Aber stellen Sie sich vor sie hinterlegen ihren Public Key an einer geeigneten Stelle. Das könnte DNS sein, das könnte aber auch ihr Facebook-Profil oder die Webseite zu ihrer eigenen Domain sein, dann wäre das ein erster Schritt.

Wir wollen ja gar nicht die Welt mit unseren Mails bepflastern aber auf Gegenseitigkeit könnten Sie mit ihren Kommunikationspartnern schon diese Selbstzertifikate austauschen, an den Kontakten hinterlegen und damit signiert und verschlüsselt senden.

Kommerzielle Massenversender wie die Telekom Rechnungsstelle, Internet Provider, Banken u.a. sollten weiterhin mit Zertifikaten einer vertrauenswürdigen RootCA arbeiten aber leider tun sie das bis heute nicht.

Weitere Links