Procédure de programmation pour vérifier une assemblée est signée par un Certificat spécifique?
Mon scénario est que nous avons un programme (exe) qui va démarrer d'autres programmes, si dans un dossier particulier. Je veux m'assurer qu'il n'a jamais démarre les programmes qui sont signés avec notre Entreprise certificat Verisign approuvé etc). Essentiellement, il sera seulement lancer les programmes avec le même certificat que lui-même. Je ne veux pas expédier le certificat lui-même.
J'ai été à la recherche sur le web et de l'espace de noms du système et n'ont pas trouvé un exemple clair qui lit les données du certificat à partir d'un fichier et également le valide, et pouvez vérifier contre l'autre fichier. Le plus proche que j'ai trouvé est Signtool et et avoir cette vérification dans un autre exe est une sorte de point de moins. Je sais que le nom Fort trucs habitude de l'aide en raison d'un fichier signé numériquement est différent, car gentiment expliqué ici (http://blog.codingoutloud.com/2010/03/13/three-ways-to-tell-whether-an-assembly-dl-is-strong-named/) Aussi quelques autres exemples dans la montrant de chiffrement et de vérification des données brutes, mais pas une assemblée où il est emballé ensemble en quelque sorte.
Des idées ou des suggestions?
Vous devez vous connecter pour publier un commentaire.
Voici un blog avec des exemples de code sur la façon de vérifier l'assemblée signatures:
http://blogs.msdn.com/b/shawnfa/archive/2004/06/07/150378.aspx
L'exemple de code à la fin montre comment vérifier si une assemblée est signée par Microsoft ou pas - vous pouvez faire de même en obtenant le certificat de jeton pour votre entreprise certificat(s).
Mise à jour: utilisateur @Saber édité cette mise à jour, mais que la mise à jour a été rejetée par d'autres. Cependant, il est tout à fait valable conseils, je suis donc reposter son édition depuis DONC je ne me laisse pas l'approuver:
Edit (merci, OP): Si vous voulez faire cela de manière plus sécurisée (c'est à dire rendre votre programme plus inviolable), référence à un assembly dans votre programme qui est nommé fortement avec la clé correspondante, puis utiliser le jeton de l'assembly référencé à comparer avec le jeton de la convocation de l'assemblée. Si vous utilisez un des tableaux d'octets (comme pour le lien), il peut être simplement hex modifiés.
Vous pouvez essayer les trois option ici.
1) Le premier est l'aide de l'Assemblée de la charge comme ici:
Vous pouvez imprimer au format hexadécimal de la clé publique et la clé publique de jeton pour un montage spécifique en utilisant la suite d'une Forte Nom (Sn.exe commande:
Si vous avez un fichier de clé publique, vous pouvez utiliser la commande suivante à la place (notez la différence dans l'affaire sur l'option de ligne de commande):
2) Le second est mentionné ici. Et d'utilisation p/Invoke pour une telle question.
3) existe Également en troisième, plus agile, plus complexe et plus moyen de le faire. C'est un la Stratégie de Liaison. Vous pouvez le prendre en compte dans le cas où vous devez fournir des mises à niveau pour une application qui est déjà déployé. Lorsqu'une nouvelle version d'un composant partagé sort que votre application peut bénéficier de l'application de la politique de fichier va vous permettre de fournir ces prestations, sans recompilation ou le remplacement d'installations existantes.
Vous pouvez trouver plus d'informations sur cette fonctionnalité ici:
http://msdn.microsoft.com/en-us/library/aa309359%28v=vs.71%29.aspx
http://ondotnet.com/pub/a/dotnet/2003/03/17/bindingpolicy.html
Il existe deux technologies de signature pour .NET assemblées: strongnaming et Authenticode (authenticode est utilisée pour signer les PE et quelques autres fichiers, pas seulement .NET assemblées). Ils sont utilisés à des fins différentes. Les certificats sont utilisés dans Authenticode seulement d'authentifier l'auteur. Strongnaming n'est pas l'authenticité de l'auteur à tous.
En plus de la vérification de la signature, le certificat doit être validés pour s'assurer qu'il a été émis pour un auteur donné. Une validation adéquate est une procédure complexe qui implique la CRL (liste de révocation de certificats) et le protocole OCSP (online certificate status) de la vérification.
Pour effectuer la vérification de signature Authenticode vous avez besoin Authenticode composant de vérification. Une des options est d'utiliser PKIBlackbox ensemble de nos SecureBlackbox produit. Le forfait comprend Authenticode de vérification ainsi que le certificat complet des mécanismes de validation.
Notez que si vous n'allez pas à valider le certificat, il n'y a pas de sens dans la vérification de la signature à tous, parce que l'on peut créer un certificat auto-signé sur le même Sujet, numéro de Série, etc., et de l'utiliser pour signer le faux de l'assemblée.
Je crois qu'il existe un moyen d'utiliser le nom fort dans le but de "Confiance". Je comprends Microsoft recommande seulement de nom fort pour assurer le montage contenu n'a pas été modifié et suggère d'utiliser "Authenticode" pour la confiance.
Mais si le chargeur de l'application (l'application qui charge ces ensembles de programmes tient à jour une Chiffré liste des "Assemblées" à qui il peut charger; ne serait-ce pas résoudre la "Fiducie" problème?
Par exemple, le package chargeur peut maintenir le nom de l'assembly avec les clés publiques et les charges de l'assemblée/programme via un nom d'assembly?