Laden...

Signatur/Certificate einer Datei überprüfen

Erstellt von go7chib vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.559 Views
G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren
Signatur/Certificate einer Datei überprüfen

Hallo,

ich möchte für eine signierte Datei überprüfen, ob die Signatur gültig ist. Hab in der MSDN gelesen, dass man das mit einem Tool (chktrust.exe) machen kann. Ich möchte das aber gerne intern imn Programm machen und keine externe Anwendung für die Überprüfung aufrufen. Hat jemand damit schon Erfahrung? Hab bis jetzt nix brauchbares im Internet gefunden...
Vielen Dank!

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo go7chib,

weiß nicht, ob es einen direkten Weg gibt, aber du kannst ja mal chktrust.exe per Process.Start aufrufen und nach Process.WaitForExit mit Process.ExitCode den Rückgabecode prüfen.

herbivore

G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

Wie krieg ich beim Aufruf den Parameter für den Dateinamen mit?

Process test = Process.Start(@"C:\Programme\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin\chktrust E:\Testdatei.exe");

(die Backshlashes wurden vom Forum entfernt....)
so funktioniert es nicht, er meint er kann die angegebene Datei nicht finden. Wenn ich den Paramter weglasse, dann kommt kein Fehler (dann hat er natürlich aber auch nix überprüft...).

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo go7chib,

eine Frage für die SDK-Doku. 🙂

Verwende die Überladung public static Process Start (string fileName, string arguments);

herbivore

G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

Scheint zu funktionieren... wenn die Signatur gültig ist gibt er 0 zurück, ansonsten 1.
Vielen Dank.

Hat jemand eine Idee, wie man das ohne die chktrust.exe machen kann. Weil theoretisch könnte ja jeder die chktrust austauschen und immer "0" zurückgeben und so die Überprüfung umgehen...

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo go7chib,

du könntest ja vor dem Aufruf von chktrust.exe dessen MD5-Summe ermitteln und prüfen.

herbivore

G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

das wäre eine Alternative. Ist die chktrust standardmäßig beim Framework dabei oder muss ich die mit meinen Anwendungen selber mitliefern (darf man das?)

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo go7chib,

eine Frage für die SDK-Doku. 🙂 (Per chktrust im Index)

The Certificate Verification tool only ships with the .NET Framework SDK version 1.0 and 1.1. In later versions of the .NET Framework SDK, use the Sign Tool (SignTool.exe) utility instead.

herbivore

G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

Ah okay. Habs umgebaut auf signtool.
Eine Frage noch (hab vorher in der SDK-Doku geguckt 😉)
Kann man den Process auch so ablaufen lassen, dass man ihn nicht sieht. Im Moment is für einen kurzen Moment ein "DOS-Fenster" (weiß nicht wie man das nennt..) zu sehen...

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo go7chib,

trotzdem eine Frage für die SDK-Doku 🙂 Ok, über eine Indirektionsstufe.

ProcessStartInfo.WindowStyle = ProcessWindowStyle.Hidden

und/oder

ProcessStartInfo.CreateNoWindow = true

herbivore

G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

Vielen Dank, mit startinfo.WindowStyle = ProcessWindowStyle.Hidden; funktioniert es.

Falls jemand doch noch weiß wie eine interne Prüfung direkt in C# geht.. ich würd mich freuen 😉

S
8.746 Beiträge seit 2005
vor 18 Jahren

Das kannst du via CryptoAPI machen. In der Hilfe zu ChkTrust.exe wird auch beschrieben wie es geht:

  1. Extracts the PKCS #7 signed-data object from the file.
  2. Extracts the X.509 certificates from the PKCS #7 signed-data object.
  3. Computes a new hash of the file and compares it with the signed hash in the PKCS #7 object.
  4. If the hashes agree, Chktrust.exe verifies that the signer's X.509 certificate can be traced back to a trusted root certificate.
G
go7chib Themenstarter:in
14 Beiträge seit 2005
vor 18 Jahren

Das hatte ich auch gefunden... wusste da aber nicht weiter, da ich bei keinem der Schritte weiß wie's geht und dazu auch nix gefunden hab... Ein Beispiel dazu hast du zufällig nicht, oder?

S
8.746 Beiträge seit 2005
vor 18 Jahren

Nein, aber schau mal ans Ende dieses Artikels, da sind haufenweise Links zum Thema:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dncapi/html/netcryptoapi.asp