itwissen
Goto Top

Zertifikate mit Openssl

Verschlüsselte Übertragung im Web, E-Mails verschlüsseln und unterschreiben


back-to-topEinleitung


Nicht jeder hier hat einen Webserver und noch weniger haben einen Webserver mit ssl Verschlüsselung, aber jeder hier hat E-Mail und sollte sich Gedanken über digitale Unterschrift oder sogar Verschlüsselung machen.

Aus diesem Grund will ich hier auf die Verwendung von Zertifikaten in Verbindung mit E-Mail eingehen und den Webserverteil vernachlässigen.

back-to-topProblem


Schauen wir mal kurz in die nicht digitale Welt. Fast täglich setzen wir die Unterschrift unter Briefe auf
Papier. Hier soll der Schwung der Schrift die Zuordnung zum Unterzeichner beweisen. In ganz wichtigen Fällen muss
man aber auch in beisein einer Autorität (z.B. Notar) unterschreiben, welche dann selbst unterschreibt, dass die
Unterschrift echt ist.

Genau dieses soll nun in der digitalen Welt nachgebildet werden. Ich denke dies wurde ziemlich perfekt geschafft.

back-to-topTheorie


Was brauchen wir alles? Erstens ein asymetrisches Verschlüsselungsverahren, welches keinen gemeinsamen geheimen
Schlüssel benutzt, sondern eine Schlüsselpaar bestehend aus privatem und öffentlichen Schlüssel. Zweitens eine
Hashfunktion, welche eine Art Quersumme aus einem Dokument extrahieren kann, welche eindeutig ist.

Damit können wir nun folgendes machen:
1. Verschlüsselung:
Text mit öffentlichem Schlüssel des Empfängers verschlüsseln, verschicken, Empfänger kann mit privatem Schlüssel
wieder entschlüsseln.

2. Unterschreiben:
Hashwert aus dem Text bilden, Hash mit privatem Schlüssel verschlüsseln, Text zusammen mit verschlüsseltem Hash
verschicken, verschlüsselter Hash mit öffentlichem Schlüssel entschlüsseln und mit Hash des Textes vergleichen.

Da das ganze Verfahren steht und fällt mit der Zuordnung von öffentlichem Schlüssel zur Person (E-Mailadresse in
der digitalen Welt). Das machen wir mit einer Autorität, welche die Korrektheit der Daten im Zertifikat mit ihrer digitalen Unterschrift
bezeugt. Diese nennt sich CA (Certification Authority). Windows bringt beispielsweise eine ganze Liste mit
öffentlichen Schlüsseln von CAs mit. Wer richtig mitgedacht hat wird nun feststellen, dass man den CAs blind
vertrauen muss, sonst funktioniert das nicht. Stimmt, allerdings hat es keine Schwächung der Verschlüsselnung zu Folge,
sondern einzig die Echtheit des Unterzeichners wird in Frage gestellt!

back-to-topPraxis


back-to-topCertification Authority


Entweder wir haben eine bekannte CA zur Hand, z.B. Verisign oder eine der CAs von der Liste der
Bundesnetzagentur

Man kann sich mit openssl aber ganz leicht eine CA selbst erstellen. Der Nachteil, die ist natürlich nicht
global bekannt und muss daher immer mitveröffentlicht werden, um die Authentizität einer Unterschrift überprüfen
zu können.

openssl req -new -x509 -days 1096 -keyout cakey.pem -out cacert.pem


Jetzt haben wir eine 3 Jahre (1096 Tage) gültige CA. Welche wir später zum Unterschreiben unserer Zertifikate
benutzen. Das cacert.pem sollte man bei einer späteren Verbreitung in eine Datei mit der Endung .crt umwandeln. Dann kann Windows etwas damit anfangen.

back-to-topZertifikate


openssl req -new -keyout certkey.pem -out certreq.pem

Damit erhalten wir ein Certificate Request in der Datei certreq.pem, welche wir nun mit der CA
unterschreiben. Die Fragen sollte man korrekt beantworten, die wichtigsten sind CN (Common Name) und die E-Mail.

Bei CN gibt man am besten den Vor- und Nachnamen an. Wenn es später anderst ausschaut als man will, macht man es
einfach nochmal.

openssl x509 -req -in certreq.pem -CA cacert.pem -CAkey cakey.pem -CAcreateserial -out cert.pem -days 365

Den Key (privater Schluessel) und das unterschriebene Zertifikat (öffentlicher Schlüssen), wird noch
zusammengepackt und fuer Windows ins pkcs12 Format umgewandelt.

Windows:
copy /b certkey.pem + cert.pem keycert.pem
Linux:
cat certkey.pem cert.pem > keycert.pem

openssl pkcs12 -export -in keycert.pem -out mailcert.p12 -name "email@domain.de"  

Übrigens, wenn man statt der E-Mailadresse den Hostnamen eingibt, bekommt man ein Zertifikat für den Webserver
mit dem Hostnamen.

Das mailcert.p12 kann man nun in den Thunderbird oder Outlook importieren und seine E-Mails damit
unterschreiben (smime).

back-to-topgnupg und pgp


Im wesentlichem machen diese Programme das gleiche wie openssl. Der Unterschied liegt im Verfahren um das
Vertrauen. Man vertraut einem Freund, der wieder einem Freund und so weiter. Das wäre ein anderes Tutorial Wert.
Ein kleiner Nachteil ist noch, dass man dafür noch extra Erweiterungen im Thunderbird und Outlook einbauen muss.

back-to-topAdobe PDF


Mit diesem Zertifikat kann man auch PDF Dateien unterschreiben. Ich habe das mit dem Adobe Acrobat 7.0 Standard
getestet. Das Einbinden einer eigenen CA habe ich nicht geschafft.

back-to-topFazit


Ab jetzt möchte ich von jedem nur noch unterschriebene E-Mails, alles andere wird als Spam sofort gelöscht. Ja,
auch das wäre eine Möglichkeit den Werbemüll einzudämmen.

Ausserdem möchte ich nochmal auf Thawte hinweisen. Dort bekommt man umsonst ein
Zertifikat, welches von einer bekannten CA unterschrieben ist.
Update (06.11.09): Thawte hat inzwischen die kostenlose Vergabe von S/MIME eingestellt.

E-mail Client Testing for S/MIME Compliance

Content-ID: 28865

Url: https://administrator.de/contentid/28865

Ausgedruckt am: 24.11.2024 um 15:11 Uhr

stpe
stpe 24.03.2006 um 08:24:41 Uhr
Goto Top
In diesem Zusammenhang weise ich auf die Kryptokampagne von Heise hin. Auch hier ist es möglich, sich seine GPG-Schlüssel öffentlich zertifizieren zu lassen.

Dies ist jedes Jahr auf dem Cebit-Stand bei Heise möglich (Pech für dieses Jahr, die Cebit ist gerade vorbei face-sad ) aber auch unterjährig kann man sich an der Kryptokampagne beteiligen. Infos dazu gibt's auf heise.de.

Gruss
Stefan
Garfieldt
Garfieldt 30.04.2006 um 12:15:32 Uhr
Goto Top
Da PGP in der Version 9 als E-Mail Proxy arbeitet, ist es nicht mehr nötig irgendwelche E-Mail Program PlugIns zu installieren.
nullplan001
nullplan001 20.06.2006 um 17:19:46 Uhr
Goto Top
Mich quält da gerade eine Frage: Welche Datei muss ich an meine Freunde weitergeben, damit die auch verschlüsselte Nachrichten von mir entschlüsseln können? Und was müssen die dann damit machen? ich habe nicht soviel Ahnung von OpenSSL oder SSL im allgemeinen.
Und ganz nebenbei hat ein Zertifikat von Thawte den entscheidenden Nachteil, dass dein Name nicht drinsteht. Um das zu ändern, musst du entweder selbst WOT-Notar, Bank-Manager oder Staatsanwalt in Ausbildung sein, oder Mitglied im WOT werden. Was für 50 Punkte geht. Toll, in der Nähe von mir sind genau drei Notare, die mir, wenn sie mir alle Punkte geben, die sie geben dürfen, genau 40 Punkte geben können. Und das nur für ein lumpiges Zertifikat, dass ich auch selbst erstellen kann. Danke, verzichte zu Ungunsten anderer.
Tschö,
nullplan
ITwissen
ITwissen 21.06.2006 um 13:44:02 Uhr
Goto Top
Mich quält da gerade eine Frage: Welche
Datei muss ich an meine Freunde weitergeben,
damit die auch verschlüsselte
Nachrichten von mir entschlüsseln
können? Und was müssen die dann
damit machen? ich habe nicht soviel Ahnung
von OpenSSL oder SSL im allgemeinen.

Siehe "Theorie" Punkt 1.

Und ganz nebenbei hat ein Zertifikat von
Thawte den entscheidenden Nachteil, dass
dein Name nicht drinsteht. Um das zu
ändern, musst du entweder selbst
WOT-Notar, Bank-Manager oder Staatsanwalt in
Ausbildung sein, oder Mitglied im WOT werden.
Was für 50 Punkte geht. Toll, in der
Nähe von mir sind genau drei Notare,
die mir, wenn sie mir alle Punkte geben, die
sie geben dürfen, genau 40 Punkte geben
können.

Du kannst dir auch bei Verisign (oder anderen, siehe Bundesnetzargentur) ein Zertifikat fuer ein Jahr kaufen. Bei Thawte hat man immerhin die Moeglichkeit eines umsonst zu bekommen. Das Verfahren von Thawte ist leider notwendig, siehe "Theorie" letzter Abschnitt.

Und das nur für ein
lumpiges Zertifikat, dass ich auch selbst
erstellen kann.

Ja, ich kann auch ein Zertifikat mit deinem Namen (und E-Mail) drin erstellen. Woher soll also bei einem selbst erstellten Zertifikat der Empfaenger wissen, dass es wirklich von dir ist?

Ich empfehle dir dich noch etwas weiter in die Materie Verschluesselung/digitale Unterschriften einzuarbeiten.
VSdux
VSdux 27.05.2007 um 10:00:42 Uhr
Goto Top
Irgendwie versteh ich das nicht.
Ich habe nun ein Zertifikat erzeugt und das in Thunderbird importiert. Als Email habe ich mein@name.de angegeben (Beispiel).
Wenn ich nun eine Nachricht verfasse und unter S/MIME auf "Sicherheitsinformationen anzeigen" gehe erhalte ich für den Empfänger mein@name.de den Status "ungültig" und für alle anderen Empfänger den Status "nicht gefunden"

Kann ich mit dem Zertifikat nur an eine Emailadresse Mails verschicken? Warum ist mein Zertifikat ungültig?
nullplan001
nullplan001 28.05.2007 um 10:45:31 Uhr
Goto Top
Ich weiß nicht genau, wo dein Problem liegt, aber: mit einem privaten Schlüssel kannst du nur eine Adresse, nämlich deine, Versorgen. Den öffentlichen Schlüssel kannst du an alle, die es wissen wollen, verteilen. Damit können alle, die einen öffentlichen Schlüssel erhalten haben, dir eine verschlüsselte Mail schicken. Um einem anderen eine verschlüsselte Mail zu schicken, muss du seinen öffentlichen Schlüssel haben (und er den dazugehörigen privaten Schlüssel). Jetzt verstanden?
flugfaust
flugfaust 13.01.2008 um 15:08:17 Uhr
Goto Top
Wie kann ich ein P12 Zertifikat für Mail for Exchange erstellen?
Blicke da nicht so wirklich durch
Garfieldt
Garfieldt 13.01.2008 um 18:16:49 Uhr
Goto Top
Wie kann ich ein P12 Zertifikat für Mail
for Exchange erstellen?
Blicke da nicht so wirklich durch

Ich blicke nur nicht durch, was das mit OpenSSL zu tun haben soll.
flugfaust
flugfaust 20.01.2008 um 17:49:28 Uhr
Goto Top
Wieso sollte das nichts mit OpenSSl zu tun haben?
chrihech
chrihech 12.03.2008 um 08:39:32 Uhr
Goto Top
hallo. kann mir bitte jemand sagen wie ich die Server-IP-Adresse in das Zertifikat integrieren kann?
danke lg
ITwissen
ITwissen 12.03.2008 um 08:56:37 Uhr
Goto Top
Ich nehme an du willst, im Gegensatz zum oben Beschriebenen, ein Zertifikat fuer deinen Webserver erstellen. Dann musst du den IP-Namen des Webservers im "Common Name" eingeben. Du musst dort genau die Adresse reinschreiben, die der User in seinen Web-Browser schreibt.

z.B. User schreibt im Webbrowser:
https://www.wasauchimmerhirsteht.de
dann muss als "Common Name" folgendes eingetragen werden:
www.wasauchimmerhirsteht.de

Ansonsten wird der Webbrowser beim Ansurfen der Seite jammern, dass das Zertifikat nicht vom Server kommt.
chrihech
chrihech 12.03.2008 um 09:20:06 Uhr
Goto Top
Danke für die schnelle antwort. Ich brauche das Zertifikat jedoch eigentlich für eine 802.1x Implementierung und wenn ich die IP-Adresse des RADIUS-Servers nicht in das Zertifikat integriere akzeptiert es der Supplicant nicht und sendet "Fatal decrypten error", da ja sonst nur der Name des Servers zur verifizierung verwendet wird und das könnte ja dann jeder sein(etc\hosts...).
Weist du zufällig wie das geht?
lg
chrihech
chrihech 21.03.2008 um 14:58:56 Uhr
Goto Top
Hat sich erledigt. Das Problem war nicht die IP-Adresse, da diese auch einfach als common name integriert werden kann. Das Problem waren die für Windows und 802.1x notwendigen OIDs. Habe diese mit "-extensions" und einer "xpextensions"-Datei integriert und des funktioniert.
Dankeschön trotzdem für die Antwort
lg