Und zwar gewaltig.
Heute hab ich eine Menge Zeit darauf verbrannt unserem Online-Update-System auf den Zahn zu fĂŒhlen. Das arbeitet nĂ€mlich ganz hervorragend mit Sparkle um fĂŒr unsere Applikation via Appcast herunter zu laden, wenn eine neue Version ansteht. Und damit das auch schön sicher ist, nutzen wir ein kleines öffentlich/privates SchlĂŒsselpĂ€rchen um das abzusichern.
Nun ja, bis heute mittag - da hat es nÀmlich auf einmal aufgehört und konnte die heruntergeladenen Dateien nicht mehr validieren.
Jetzt hatte ich natĂŒrlich das Problem, das ich an sich recht wenig von Crypto verstehe und erst recht wie man das von der shell aus einsetzt. Das wiederum hatte zur Folge, dass ich das nicht sofort auf der Shell nachvollziehen konnte und wir schon anfingen zu fĂŒrchten das vielleicht unsere SchlĂŒssel abgelaufen sind.
Gott sei dank war es aber doch was anderes - denn unser Proxy hatte fieser weise einfach eine alte Version des Appcasts gespeichert und stattdessen immer die ausgeliefert - was natĂŒrlich nicht funktionierte... Grumpf.
Note to self: NÀchstes mal gleich den ganzen Vorgang von Hand reproduzieren um zu sehen wo es schief lÀuft - und zwar angefangen von da wo das Programm anfÀngt. (Auch wenn in diesem Fall die Fehlermeldung wirklich eher auf einen OpenSSL Fehler hindeutete).
Debuggen ist eben schwieriger als den Code zu schreiben. Ich vermute, weil man ihn dafĂŒr wirklich verstehen muss - inklusive aller Fehler die man in seinem eigenen VerstĂ€ndnis hat.
P.S.: So Signiert und Validiert man ein File mit OpenSSL von der Kommandozeile:
# base 64 encoding to ease textual transmission openssl dgst -dss1 -sign dsa_private_key.pem Important.rtf | openssl enc -base64 > signature.sig # and decode again openssl enc -base64 -d < signature.sig > decoded.signature.sig # and verify openssl dgst -dss1 -verify dsa_public_key.pem -signature decoded.signature.sig Important.rtf
Einige Fallstricke: -dss1 und -sha1 erzeugen offenbar die gleichen Checksummen (man könnte also meinen das es der gleiche Algorithmus ist) die beiden digest modi werden aber in openssl offenbar unterschiedlich behandelt. Beim Signieren löst das verwenden von -sha1 auch schön eine Fehlermeldung aus - wenn man beim ĂberprĂŒfen aber -sha1 zu verwenden versucht, dann erhĂ€lt man nur den Hinweis dass die Verifikation gescheitert ist - an einem falschen public key. Seeehr hilfreich liebe Entwickler.
Wie man ein SchlĂŒsselpaar erzeugt und vieles mehr gibts hier.