Signieren mit OpenSSL
OpenSSL eignet sich nicht nur zur Verschlüsselung, sondern auch zum Signieren. Eine Signatur ist immer dann wichtig, wenn die Herkunft einer Datei zweifelsfrei sein muss. Die Dateisignatur funktioniert dabei ähnlich wie die Verschlüsselung – jedoch ist der Inhalt der Nachricht immer lesbar. Der Empfänger kann dann anhand des Public-Keys des Erstellers die Herkunft sicherstellten. Bei der Signatur einer Datei handelt es sich wieder um ein Verfahren mit zwei Dateien. Dabei gibt es einmal die Datei, deren Herkunft zu klären ist und den Public-Key des Erstellers.
Um eine Datei signieren zu können, wird wieder das Schlüsselpaar aus Public- und Private-Key benötigt. Sowie eine Datei, welche signiert werden kann. In diesem Fall heißt unsere zu signierende Datei „wichtig.txt“.
|
1 |
echo "Datei deren Integrität und Herkunft von großer Bedeutung ist." > wichtig.txt |
Signiert wird mit dem Algorithmus SHA256 und dem Private-Key. Dabei wird die Signatur als „signatur.sha256“ gespeichert. Die Dateiendung spielt hierbei keine Rolle. Sie dient hier nur exemplarisch zur besseren Nachverfolgbarkeit der einzelnen Schritte.
|
1 |
openssl dgst -sha256 -sign privatekey.pem -out signatur.sha256 wichtig.txt |
Anschließend kann man die Signatur noch in Base64 kodieren. Damit wäre der Industriestandard abgedeckt. Zwingend erforderlich ist dies jedoch nicht.
|
1 |
openssl base64 -in signatur.sha256 -out signatur-b64.sig |
Datei uns Signatur können nun veröffentlicht werden.
Um die Signatur einer Datei zu prüfen, wird der Weg rückwärts gegangen. Hierbei muss zunächst die Base64 kodierte Signatur zurück in SHA256 gewandelt werden. Dazu wird die Signatur hier exemplarisch zwischengespeichert als „sig-b64.sha256“.
|
1 |
openssl base64 -d -in signatur-b64.sig -out sig-b64.sha256 |
Die Verifizierung wird dann gemeinsam mit dem Public-Key des Erstellers durchgeführt:
|
1 |
openssl dgst -sha256 -verify publickey.pem -signature sig-b64.sha256 wichtig.txt |
Das Ergebnis sollte dann „Verified OK“ lauten. Im Fehlerfall gibt es die Ausgabe „Verification failure“.
|
1 2 |
openssl dgst -sha256 -verify publickey.pem -signature sig-b64.sha256 wichtig.txt INT ✘ 15s > Verified OK |