Obtenez de l'horodatage de signature Authenticode de fichiers .NET

Nous avons besoin pour vérifier que les fichiers binaires sont signés correctement avec signature numérique (Authenticode). Ceci peut être réalisé avec signtool.exe assez facilement. Cependant, nous avons besoin d'un moyen automatique qui vérifie également signataire nom et l'horodatage. C'est faisable en C++ natif avec CryptQueryObject() API comme indiqué dans ce merveilleux exemple: Comment Obtenir des Informations de signature Authenticode Exécutables

Cependant, nous vivons dans un monde géré 🙂 d'où la recherche de solution C# pour le même problème. Droites approche serait de pInvoke Crypt32.dll et tout est fait. Mais il y a une telle API managée dans System.Security.Cryptography.X509Certificates espace de Noms. X509Certificate2 Classe semble fournir certaines informations, mais pas de timestamp. Maintenant, nous sommes arrivés à la question de départ comment pouvons-nous obtenir que l'horodatage de la signature numérique en C Sharp?

  • La gestion de authenticode classes de laisser beaucoup de choses! Il est probablement plus facile de p/Invoke.
  • La première raison est que le code managé est plus photogénique. D'autre part, dans plusieurs articles MSDN il y a d'effrayant billets comme celui-ci Remarque La fonction WinVerifyTrust est disponible pour une utilisation dans les systèmes d'exploitation répertoriés dans la section des Exigences. Il peut être modifié ou non disponibles dans les versions ultérieures. Lorsque Windows Vista est le dernier système pris en charge. Bien sûr WinVerifyTrust et CryptQueryObject travailler sur Windows 7, mais avec toutes ces mises en garde, il semble logique d'utiliser une autre API. Il semble que les Certificats d'espace de noms est à moitié cuit, en effet. Drôle, mais cet avertissement n'est pas présent dans MSDN en ligne maintenant...
  • un .NET de Base de la solution à ce problème serait un joli bonus trop.
InformationsquelleAutor SlavaGu | 2010-07-19