Kann eine Nachricht mit einem SSL-Zertifikat für eine Website signiert werden?

507
toddmo

Ich möchte das SSL-Zertifikat meiner Website verwenden und eine Nachricht signieren, damit ein anderer Benutzer das SSL-Zertifikat meiner Website und meine Nachricht abrufen und überprüfen kann, ob das Zertifikat mit meinem Zertifikat signiert wurde.

Wie kann ich eine Nachricht mit meinem SSL-Websitezertifikat signieren?

1
Du kannst nicht SSL-Zertifikate werden zum Sichern von Domänen verwendet, nicht zum Signieren von Nachrichten. DavidPostill vor 6 Jahren 3
@David Nein, technisch könnten Sie das sicherlich tun (schließlich ist die Art und Weise, wie Zertifikate "sichere Domänen" ** sind, indem Sie während des TLS-Handshakes digitale Signaturen erstellen). Der Empfänger akzeptiert die Signatur möglicherweise nicht, weil die extendedKeyUsage nicht passt . Und ich weiß nur, wie man das über `openssl` macht, nicht über Windows CAPI. grawity vor 6 Jahren 1
@grawity, wenn du eine Antwort auf `openssl` geben möchtest, akzeptiere ich sie. Es wird die allgemeine Idee festlegen und dann kann ich es auf andere Umgebungen wie Windows übertragen. Heutzutage gibt es für fast alles ein Werkzeug. Wie Sie erwähnt haben, ist mir egal, was die "Nachricht" ist, solange ich sie unterschreiben kann und sie sie überprüfen können. Vielen Dank! toddmo vor 6 Jahren 0
@toddmo Besuchen Sie https://stackoverflow.com/questions/10782826/digital-signature-for-a-file-using-openssl Bora vor 6 Jahren 1
@DavidPostill, ich verstehe Ihren Kommentar nicht, da ich gerade eine Nachricht unter Verwendung meines SSL-Zertifikats für die Domäne unterschrieben und überprüft habe. Was genau willst du damit sagen? Könntest Du das erläutern? Ich habe eine Antwort gepostet, die zeigt, was ich getan habe. toddmo vor 6 Jahren 0
Todd, was du machst, ist technisch * möglich *, aber es ist definitiv umständlich. Das Signieren von E-Mails ist bereits komplex, selbst wenn es einfach erscheint. Was @DavidPostill aussagt, ist im Wesentlichen "aus Sicht der Benutzererfahrung lohnt sich der Aufwand nicht." JakeGould vor 6 Jahren 0
@JakeGould, also was Sie sagen, Superuser ist nur für Benutzer und als Entwickler hätte ich dies auf stackoverflow fragen sollen? Ich dachte, der Superuser war für "IT-Admins", nicht für "Benutzer". toddmo vor 6 Jahren 0
@toddmo „… du sagst also, Superuser…“ Ich habe absolut keine Ahnung, woher du diese Schlussfolgerungen zieht. Ich bin froh, dass du eine Lösung gefunden hast! Ich versuche aber auch nur zu klären, worüber David Postill geschrieben hat. JakeGould vor 6 Jahren 0

1 Antwort auf die Frage

1
toddmo

Das stellte sich als direkt heraus. Die Gutschrift geht an https://stackoverflow.com/a/18359743/1045881 . Ich habe es einfach für Neulinge wie mich umgeschrieben.

Sagen wir mal die Seite ist example.com

Windows

Erhalten Sie Ihr Zertifikat

Wenn Sie sich auf der Signaturseite befinden, kontrollieren Sie Ihr Zertifikat. Sie können die guten Anweisungen unter folgender Adresse befolgen: https://www.thawte.nl/de/support/manuals/microsoft/all+windows+servers/export+private+key+or+certificate/

Dadurch erhalten Sie Ihren privaten Schlüssel und das für die folgenden Schritte erforderliche Zertifikat.

Wenn Sie sich nur auf der Überprüfungsseite befinden, können Sie in Ihrem Browser auf die Sperre neben der Webadresse klicken, das Zertifikat anzeigen und base64 in eine CRT- oder CER-Datei exportieren. Der Dateiname ist nicht wichtig, domain.crtist aber ein guter Name.

Installiere openssl

Installiere openssl. Ich habe https://indy.fulgan.com/SSL/ von https://wiki.openssl.org/index.php/Binaries verwendet . Extrahieren Sie es in einen Installationsordner von openssl. Ich nenne das den openssl-Ordner.

Führen Sie openssl aus

Gehen Sie einfach in Ihren openssl-Ordner opensslund geben Sie die Eingabetaste ein. Jetzt bist du in einer opensslAufforderung.

Zeichen

Sie benötigen Ihren privaten Schlüssel. Es sieht aus wie das:

-----BEGIN RSA PRIVATE KEY----- (bunch of base64 text)== -----END RSA PRIVATE KEY----- 

Speichern Sie es zum Beispiel example.key. Aber der Dateiname ist nicht wichtig, nur hilfreich.

Dann speichern Sie eine Nachricht in einer Datei namens message.txt. Es kann leer sein. Und der Dateiname ist nicht wichtig.

Führen Sie dann in Ihrem openssl-Ordner (in dem Sie die Binärdateien extrahiert haben) aus

dgst -sha256 -sign example.key -out signature.txt message.txt 

Es verwendet die Nachricht und den Schlüssel, um die Signatur zu erstellen.

message+ key=>signature

Überprüfen

Sie benötigen das Zertifikat der Site. Es sieht aus wie das:

-----BEGIN CERTIFICATE----- (bunch of base64)== -----END CERTIFICATE----- 

Speichern Sie es in example.crt. Der Name spielt keine Rolle.

Zunächst müssen Sie aus der Zertifikatsdatei ( example.crt) einen öffentlichen Schlüssel wie folgt erstellen :

x509 -in example.crt -pubkey -noout -out example.pub 

Dadurch wird das Zertifikat zum Erstellen des öffentlichen Schlüssels verwendet.

certificate => public key

Dann können Sie die Nachricht folgendermaßen überprüfen:

dgst -sha256 -verify example.pub -signature signature.txt -out result.txt message.txt 

Es verwendet den öffentlichen Schlüssel und die Signatur, um die Nachricht zu überprüfen, und das Überprüfungsergebnis wird in die Datei eingefügt result.txt.

public key+ signature+ message=>result

result.txt enthält entweder "Verified OK" oder "Verification Failure".


Linux

Anweisungen folgen in Kürze. Ich denke, es ist ziemlich ähnlich, abgesehen von der kleineren Syntax.