Wie programmgesteuert wird eine Assembly mit einem bestimmten Zertifikat signiert?
Mein Szenario ist: wir haben ein Programm (exe-Datei) starten weitere Programme, wenn in einem bestimmten Ordner. Ich möchte sicherstellen, dass es immer nur startet Programme, welche signiert sind mit unserem Corporate-Zertifikat (Verisign Trust-Siegel, etc). Im wesentlichen, dann wird es nur starten Sie die Programme mit dem gleichen Zertifikat wie von selbst. Ich will nicht zu dem Schiff das Zertifikat selbst.
Ich habe lange gesucht im web und den system-namespace und nicht gefunden haben, ein klares Beispiel, liest das Zertifikat von Daten aus einer Datei und auch validiert, und überprüfen können, gegen eine andere Datei. Der nächste, den ich gefunden habe ist Signtool und diese überprüfung in eine separate exe-Datei ist eine Art von Punkt weniger. Ich weiß, die Starken Naming Sachen nicht helfen, weil Sie eine Digital signierte Datei ist anders, wie hilfsbereit hier erläutert (http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/) Auch einige andere Beispiele, SO zeigt die Verschlüsselung und Verifizierung von raw-Daten, nicht aber eine Versammlung, wo es verpackt zusammen in gewisser Weise.
Irgendwelche Ideen oder Vorschläge?
InformationsquelleAutor der Frage Aaron | 2011-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein blog-post mit code-Beispielen auf, wie Sie überprüfen, Montage Signaturen:
http://blogs.msdn.com/b/shawnfa/archive/2004/06/07/150378.aspx
Den Beispielcode am Ende zeigt, wie um zu überprüfen, ob eine assembly signiert wurde, die von Microsoft oder nicht - Sie können das gleiche tun, indem man das Zertifikat token für Ihr Unternehmen die Zertifikate(s).
Update: user @Saber bearbeitet diese mit dem folgenden update, aber das update wurde abgelehnt, von anderen. Allerdings ist es sehr gültigen Rat, also bin ich Umbuchung, sein/Ihr editieren, da SO nicht lassen Sie mich zu genehmigen:
Edit (danke, OP): Wenn Sie dies tun möchten mehr sicher sind (d.h. dass dein Programm mehr tamper-proof), Referenz auf eine assembly im Programm, die stark mit der entsprechenden Taste, dann verwenden Sie die token der referenzierten assembly zu vergleichen mit dem token des aufrufenden assembly. Wenn Sie verwenden ein byte-arrays (siehe link), kann es einfach hex bearbeitet und verändert werden.
InformationsquelleAutor der Antwort KristoferA
Gibt es zwei signing-Technologien .NET assemblies: strongnaming und Authenticode (authenticode wird verwendet, um den Zeichen PE und einige andere Dateien, nicht nur .NET-Assemblys). Sie werden für unterschiedliche Zwecke verwendet. Zertifikate werden verwendet, in Authenticode-nur zur Authentifizierung des Autors. Strongnaming nicht authentifizieren der Autor überhaupt.
Neben der überprüfung der Signatur muss das Zertifikat validiert werden, um sicherzustellen, dass Sie ausgestellt wurde, für den angegebenen Autor. Richtige Validierung ist ein Komplexes Verfahren beinhaltet, dass die CRL (certificate revocation list) und OCSP (online certificate status) überprüfen.
Durchführen überprüfung der Authenticode-Signatur benötigen Sie eine Authenticode-überprüfung-Komponente. Eine der Optionen ist die Verwendung PKIBlackbox Paket unserer SecureBlackbox Produkt. Das Paket beinhaltet Authenticode-überprüfung sowie komplette Zertifikats-Validierungs-Mechanismen.
Beachten Sie, dass wenn Sie nicht gehen, um das Zertifikat zu überprüfen, es gibt keinen Sinn in der überprüfung der Signatur, da kann man erstellen ein selbstsigniertes Zertifikat mit dem gleichen Thema, Seriennummer etc., und es verwenden, um Zeichen der geschmiedete Montage.
InformationsquelleAutor der Antwort Eugene Mayevski 'Allied Bits
Können Sie versuchen, drei option hier.
1) Die erste ist, indem Sie Baugruppen laden, wie hier:
Drucken können Sie die hexadezimal-format des public-key und public-key-token für eine bestimmte Baugruppe, indem Sie die folgenden Starken Namen (Sn.exe -) Befehl:
Wenn Sie ein public-key-Datei, die Sie verwenden können, die Sie stattdessen folgenden Befehl aus (beachten Sie den Unterschied in dem Fall auf das command-line-option):
2) Die zweite erwähnt wird hier. Und mit p/Invoke für eine solche Ausgabe.
3) besteht Auch Dritte, agiler und komplexer Weg, dies zu tun. Dies ist ein Verbindliche Richtlinie. Sie können nehmen Sie es in Betracht in dem Fall, wenn Sie sollten, um zu bieten upgrades für eine Anwendung, die bereits bereitgestellt wurde. Wenn eine neue version einer gemeinsam genutzten Komponente kommt heraus, dass Ihre Anwendung davon profitieren kann, eine Anwendung policy-Datei ermöglicht Ihnen, diese Vorteile ohne Neukompilierung oder der Austausch bestehender Anlagen.
Finden Sie mehr über diese Funktion hier:
http://msdn.microsoft.com/en-us/library/aa309359%28v=vs.71%29.aspx
http://ondotnet.com/pub/a/dotnet/2003/03/17/bindingpolicy.html
InformationsquelleAutor der Antwort apros
Ich glaube, es ist ein Weg, um starke Namen für die Zwecke von "Vertrauen". Ich verstehe Microsoft empfiehlt nur starke Namen, um sicherzustellen, Montage Inhalt nicht geändert wurde und schlägt vor, "Authenticode" für Vertrauen.
Aber wenn der loader-Anwendung (die Anwendung, die lädt diese Baugruppen/Programme) unterhält eine Verschlüsselte Liste der "Baugruppen", die es laden können; wäre das nicht lösen, der "Vertrauen" - problem?
Beispielsweise das Paket loader pflegen können assembly-Namen mit öffentlichen Schlüsseln und lädt die Montage/Programm über eine vollständige Montage-name?
InformationsquelleAutor der Antwort Iftikhar Ali