Zertifikate mit Openssl
Verschlüsselte Übertragung im Web, E-Mails verschlüsseln und unterschreiben
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.
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.
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!
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.
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.
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.
Den Key (privater Schluessel) und das unterschriebene Zertifikat (öffentlicher Schlüssen), wird noch
zusammengepackt und fuer Windows ins pkcs12 Format umgewandelt.
Windows:
Linux:
Ü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).
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.
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.
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
Inhaltsverzeichnis
Einleitung
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.
Problem
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.
Theorie
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!
Praxis
Certification 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.
Zertifikate
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
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).
gnupg 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.
Adobe 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.
Fazit
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 28865
Url: https://administrator.de/contentid/28865
Ausgedruckt am: 24.11.2024 um 15:11 Uhr
13 Kommentare
Neuester Kommentar
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 ) aber auch unterjährig kann man sich an der Kryptokampagne beteiligen. Infos dazu gibt's auf heise.de.
Gruss
Stefan
Dies ist jedes Jahr auf dem Cebit-Stand bei Heise möglich (Pech für dieses Jahr, die Cebit ist gerade vorbei ) aber auch unterjährig kann man sich an der Kryptokampagne beteiligen. Infos dazu gibt's auf heise.de.
Gruss
Stefan
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
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
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?
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?
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?
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
Weist du zufällig wie das geht?
lg
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
Dankeschön trotzdem für die Antwort
lg