Digitalte Signatur / Code Signing
-
[Edit]Nach der Informationssuche für die Frage ist von der Frage nichts übrig geblieben[/Edit]
Ich habe eine Software die eine Digitale Signatur erhält. Nun möchte ich prüfen, ob es sich hierbei um meine Signatur handelt. Das prüfen ob es sich um eine gültige Signatur handelt lies sich zügig finden:
http://pinvoke.net/default.aspx/wintrust/WinVerifyTrust.html
Mit dem prüfen "ist es meine Signatur" lief es mangels Wissen deutlich schlechter. Nach einem durchstöbern der MSDN stieß ich dann auf die Klasse X509Certificate2.
In der Kombination aus diesen Informationen lies sich dann folgendes zusammenbasteln:
static public bool CheckFile(string filename) { // prüfen ob die Datei gültig signiert ist bool ret = WinTrust.VerifyEmbeddedSignature(filename); // und dann die Signatur selbst prüfen X509Certificate2 cert = new X509Certificate2(filename); return ret && cert.Verify() && cert.Subject == <Das zu prüfende Subect>; }
static public bool CheckFile(string filename) { try { if (!WinTrust.VerifyEmbeddedSignature(filename)) return false; X509Certificate2 cert = new X509Certificate2(filename); return cert.Verify() && cert.Subject == <Subject>; } catch (System.Exception ex) /* Hier ggf. die Exceptions eingrenzen! */ { return false; } }
Mittels WinTrust lässt sich die Signatur generell prüfen und erlaubt das "auffinden" von Änderungen am File. Mittels dem X509Certificate2 kann man dann Einzelheiten der Signatur prüfen.
Mangels Wissen hab ich hier doch ne weile rumgesucht. Vllt. hilft der Post ja mal jemanden (und sicherlich gibt es gleich nen Post mit einer einfacheren Lösung