.NET Base: CodeSigning - .NET Base

Zum Inhalt wechseln

Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich

CodeSigning

Geschrieben 13. Sep 2009 - 15:54 (#1) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 842
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Dieser Artikel beschreibt, was CodeSigning ist, wie und wo man Zertifikate erstehen und Signaturen in die einen Anwendungen einbetten kann.

Was ist CodeSigning
CodeSigning ist eine Technologie, mit welcher Softwareautoren ihre Anwendungsdateien (exe, dll, ocx oder cab) digital Signieren können. Dies hat zwei Vorteile:
  • Benutzer können anhand der digitalen Signatur überprüfen, ob die Datei(en) während dem Download (oder über einen anderen Weg) beschädigt wurden.
  • Die Identität des Softwareherstellers kann eindeutig anhand des Zertifikates überprüft werden. Vorraussetzung dafür ist aber, dass das Zertifikat von einer CA (Certificate Authority) ausgestellt wurde, von welcher sich das Rootzertifikat im Stammzertifikatsspeicher von Windows befindet. Momentan gibt es nur vier CA's welche auf allen Windowscomputern als Vertrauenswürdige Aussteller anerkannt werden: VeriSign, Comodo, GlobalSign und Thawte.


Wirklich bekannt wurde die CodeSigning Technologie erst mit Windows Vista, denn dort werden die Bestätigungsdialoge der Benutzerkontensteuerung anders dargestellt, wenn es sich bei der Anwendung die Administrator-Privilegien anfordert um eine signierte Anwendung handelt.
Als Beispiel hier ein Screenshot von einem UAC-Dialog von einer nicht signierten Datei:
Angehängte Datei  uac_unsigned.png (47,69K)
Anzahl der Downloads: 61
Zum Vergleich die Aufforderung bei einer signierten Datei:
Angehängte Datei  uac_signed.png (52,86K)
Anzahl der Downloads: 64

Wie zu sehen ist, wird in dem Dialog bei einer signierten Datei das Icon, der Titel der Anwendung und der CommonName des Zertifikates (in dem Beispiel mein Name) angezeigt.
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
2

Geschrieben 13. Sep 2009 - 15:55 (#2) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 842
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Woher bekomme ich ein CodeSigning Zertifikat?
Vom Prinzip her, könnte man sich selber CodeSigning Zertifikate ausstellen, man hat nur das Problem, dass das Zertifikat auf keinem anderen Computer als dem eigenen als gültig anerkannt wird. Es sei denn man installiert manuell das Rootzertifikat im Zertifikatsspeicher was aber nicht Sinn der Sache ist.
Wie ich im oberen Post schon erwähnt habe, befinden sich auf allen Windows Computer Standardmäßig die Rootzertifikate von VeriSign, Comodo, GlobalSign und Thawte im Zertifikatsspeicher, was bedeutet, dass es nur Sinnvoll ist von einer dieser Zertifizierungsstellen ein Zertifikat zu beziehen.

Wie bekomme ich ein Zertifikat?
CodeSigning Zertifikate sind wie digitale Ausweise, weshalb es nicht verwunderlich ist, dass die Zertifizierungsstellen strenge Auflagen bei der Überprüfung der Identität des Antragstellers zu erfüllen haben.
In der Regel verlangt der Aussteller von dem Antragsteller mehrere offizielle Dokumente und eine Kopie des Ausweises welche den Namen des Antragsstellers beinhalten.
Es sei erwähnt, dass nicht alle Zertifizierungsstellen Zertifikate für Privatpersonen ausstellen sondern nur für eingetragene Firmen. Dabei sind dann natürlich Dokumente einzureichen, die z.B. anhand von Steuerunterlagen und Gewerberegisterauszügen die existenz des Unternehmens bestätigen.

Preise
Die Preise für ein CodeSigning Zertifikat reichen bei einem direktkauf bei den Zertifizierungsstellen von 179$ bis 499$ pro Jahr. Es gibt allerdings die Möglichkeit, über einen Reseller deutlich günstiger an die gleichen Zertifikate zu kommen. Beispielsweise bietet KSoftware* (authorisierter Comodo Reseller) CodeSigning Zertifikate schon für 99$ (+ 17,5% VAT) pro Jahr an.

Update: Über StartSSL bekommt man nun ein CodeSigning Zertifikat für ~40€. Mehr dazu gibt es hier: http://dotnetbase.de...ndpost__p__5096

*: Besten Dank an Dennis für den Link :)

Dieser Beitrag wurde von Maximilian bearbeitet: 06. Aug 2010 - 20:52

Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
1

Geschrieben 13. Sep 2009 - 15:55 (#3) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 842
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Microsoft stellt mit dem Programm SignTool.exe eine Anwendung bereit, die das digitale Signieren von Dateien ermöglicht. Dieses Programm, welches dem .Net Framework SDK beiliegt, bietet zwei möglichkeiten an Dateien zu signieren:
1) Mit einem integrierten Wizard (Dafür das Programm mit folgendem Parameter starten:
signtool.exe signwizard

2) Direkt über die Kommandozeile.

Kommandozeilenparameter

Schritt 1: Zertifikat auswählen
Aus dem Zertifikatsspeicher: Mit dem Parameter /a weißt man das SignTool an, im Zertifikatsspeicher nach einem geeigneten Zertifikat zu suchen. Stehen mehrere Zertifikate zur Auswahl wird das Zertifikat benutzt, welches am längsten gültig ist.
Aus einer PFX Datei: Wer das Zertifikat nicht im Zertifikatsspeicher des Computers installiert hat, kann mit dem Parameter /f eine PFX-Datei angeben, welche neben dem Öffentlichen auch den Privaten Schlüssel enthält. Ist die PFX-Datei Passwortgeschützt, kann dieses mit dem Parameter /k mitgegeben werden.

Beispiel zum Zertifikatsspeicher:
signtool.exe sign /a MyFile.exe

Beispiel mit einer PFX-Datei:
signtool.exe sign /f "D:MeinZertifikat.pfx" /k "[MeinSicheresKennwort]" MyFile.exe


Schritt 2: Timestampserver festlegen (optional)
Man hat mit dem SignTool die Möglichkeit, der Signatur einen Zeitstempel hinzuzufügen.
Dies hat neben dem genauen Signaturdatum noch einen weiteren Vorteil:
Die Gültigkeit der Signatur ist, bei einer Signierung ohne Zeitstempel, auf die meines Zertifikates beschränkt. Wird der Signatur nun eine Gegensignatur des Zeitstempelservers hinzugefügt, ist die Signatur auch nach Ablauf der Gültigkeitsperiode meines Zertifikats noch solange gültig, wie das Ablaufdatum des Zertifikats mit welchem gegensigniert wurde.

Der Parameter zur Angabe eines Zeitstempelservers lautet /t gefolgt von der URL des Servers.
Liste mit Zeitstempelservern:

Hinweis: Ihr müsst bei der Gegensignatur nicht den Zeitstempelserver von eurem Zertifikatsaussteller nutzen, so läßt sich z.B. ein Zertifikat ausgestellt von Comodo problemlos mit einer VeriSign Gegensignatur versehen.

Beispiel:
signtool.exe sign /a /t "http://timestamp.comodoca.com/authenticode" MyFile.exe


Schritt 3: Zusätzliche Parameter
Mit den Parametern /d und /du können eine Beschreibung der Datei (/d) und eine URL für weiterführende Informationen (/du) angegeben werden. Die Programmbeschreibung wird z.B. auch im UAC-Dialog über dem Namen des Zertifikatsbesitzers angezeigt.

Beispiel:
signtool.exe sign /a /t "http://timestamp.comodoca.com/authenticode" /d "Meine  Anwendung" /du "http://meinewebsite.com/meineAnwendung" MyFile.exe


Eine Auflistung weiterer Kommandozeilenparameter für das SignTool gibt es in der MSDN unter folgendem Link:
Signaturtool (SignTool.exe)
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
1

Geschrieben 13. Sep 2009 - 15:56 (#4) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 842
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Neben dem UAC Dialog, welcher Vista vorbehalten ist, bietet Windows (ab Windows 2000) in den Dateieigenschaften einen extra Tab für digitale Signaturen.
In diesem werden alle Signaturen aufgelistet die der Datei beigefügt sind.
Die existenz eines Eintrages in diesem Tab ist aber kein indikator für die Gültigkeit der Signatur. Dies erfährt man erst, wenn man die Signatur markiert und auf 'Details' klickt. Dort wird oberen Bereich sofort dargestellt ob die Signatur gültig-
Angehängte Datei  explorer_signed.png (49,83K)
Anzahl der Downloads: 30
oder ungültig ist (z.B. bei einer Manipuation der Datei)
Angehängte Datei  explorer_unsigned.png (50,07K)
Anzahl der Downloads: 30

Alternativ kann man mit dem SignTool auch die Gültigkeit von Signaturen mit folgendem Kommandozeilenparameter überprüfen:
signtool.exe verify /pa "C:MeineSignierteDatei.exe"

Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
1

Geschrieben 13. Sep 2009 - 15:56 (#5) Mitglied ist offline   Maximilian 

  • caffeine addicted
  • Blog anzeigen
  • Gruppe: Administratoren
  • Beiträge: 842
  • Registriert: 10. Sep. 09
  • Wohnort: Im dicken B oben an der Spree
  • OS: Windows 7 Ultimate (x64)
  • IDE: VS 2010 Premium

Wer seine Dateien direkt nach dem Erstellen im Visual Studio signieren möchte, kann im Postbuildereignis einen entsprechenden Befehl hinzufügen.

Dafür öffnet ihr euer Projekt das signiert werden soll und geht dann in die Properties (in VB "MyProject"). Dort gibt es eine Kategorie mit dem Namen 'Buildereignisse'. In dieser Kategorie gibt es zwei Befehlsfenster, einmal Präbuildereignisse und Postbuildereignisse.
Unser Befehl zum Signieren kommt in das Postbuildereignis, da ja das fertige Assembly signiert werden soll.
Der Parameter in diesem Ereignis könnte wie folgt aussehen:
signtool sign /a /d "Meine Anwendung" /t "http://timestamp.verisign.com/scripts/timstamp.dll" "$(TargetPath)"

Wichtig: Ich habe auf meinem System das SignTool in das System32-Verzeichnis kopiert, was den Vorteil hat, bei Aufrufen wie z.B. im Visual Studio keinen Pfad zu dem SignTool angeben zu müssen.
Mit freundlichen Grüßen
Eingefügtes Bild
MaximilianKrauss.Net | updateSystem.NET

"Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why."


Unterstütze qualitative Beiträge durch ein Klick auf Eingefügtes Bild.
2

Thema verteilen:


Seite 1 von 1
  • Du kannst kein neues Thema erstellen
  • Antworten nicht möglich

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0


Enter your sign in name and password


Sign in options
Mit OpenID anmelden Mit Windows Live anmelden   Or sign in with these services