web-dev-qa-db-fra.com

C #: pourquoi signer une assemblée?

Dans certains codes C # que j'ai repris (dans Visual Studio 2005), j'ai remarqué que les assemblys sont tous signés avec le même fichier .snk.

  • Pourquoi l'auteur précédent aurait-il signé les assemblées de cette manière? 
  • La signature des assemblées est-elle nécessaire et qu'est-ce qui aurait tort de ne pas signer?
  • Quels sont les inconvénients de la signature des assemblées - est-ce que cela cause des retards?
132
Craig Johnston

Pourquoi l'auteur précédent aurait-il signé les assemblées de cette manière?

Aucune idée, il souhaitait peut-être que toutes ses assemblées soient signées avec la même clé.

La signature des assemblées est-elle nécessaire et qu'est-ce qui ne va pas avec la non-signature?

Non, ce n’est pas nécessaire, mais c’est un mécanisme qui vous permet d’assurer l’authenticité d’un assemblage. Cela vous permet de vous assurer qu'une assemblée n'a pas été falsifiée et qu'elle provient effectivement de cet auteur. C'est également nécessaire si vous voulez les mettre dans le GAC.

Quels sont les inconvénients de la signature des assemblées - cela provoque-t-il des retards?

Les assemblys signés peuvent uniquement charger d'autres assemblys signés. De plus, ils sont liés à une version spécifique, ce qui signifie que vous devez utiliser des redirections de liaison ou recompiler l'application si vous souhaitez utiliser une version différente. La vérification de la signature entraîne également un léger surcoût lié aux performances, mais il est si petit que vous ne devriez pas vous en inquiéter.

158
Darin Dimitrov

Vous devez signer des assemblys si vous voulez les placer dans le GAC

Si vous signez un fichier exécutable, toutes les bibliothèques de classes auxquelles elle est liée doivent également être signées. Cela peut être difficile si vous utilisez une bibliothèque tierce (en particulier si vous devez utiliser un ActiveX control ou similaire).

Richard Grimes a écrit un bon atelier sur la sécurité dans .NET et comporte un chapitre sur ce sujet: Atelier de sécurité

La raison pour laquelle tous les assemblys ont été signés avec le même fichier .snk pourrait être s'il utilisait des tests unitaires avec une couverture de code. Pour pouvoir couvrir le code (au moins avec les outils intégrés à la version de test de Visual Studio 2005) et si les assemblys sont signés, vous devez spécifier les fichiers .snk utilisés pour la signature, mais je pense que vous pouvez uniquement spécifiez un fichier .snk pour l'ensemble de la solution. Par conséquent, si vous signez les différentes bibliothèques de classes avec différents fichiers .snk, vous ne pouvez vérifier la couverture de code que sur l'une d'elles à la fois.

31
Hans Olsson

Une raison très importante de signer une assemblée est de vous assurer que c'est bien votre assemblée. Puisque la clé privée vous appartient, personne d’autre ne peut signer une assemblée avec cette même clé. Cela signifie que lorsque vous connaissez la clé publique d'un assemblage (vous pouvez le récupérer à l'aide de la fonction GetType().Assembly.GetName().GetPublicKey()), l'assembly vous appartient et il n'a pas été falsifié.

16
Pieter van Ginkel

Malgré tous les usages de la signature DLL, la DLL doit être signé pour deux raisons seulement 

1. Versioning 

2. Authentification

une. Le versionnage indique la version sur laquelle la DLL a été créée et, tout en les insérant dans GAC, deux DLL du même nom peuvent exister, mais une version différente

b. L'authentification indique si la dll n'est pas falsifiée et existe de la même manière lorsqu'elle a été créée.

Si vous voulez en savoir plus sur les bases et la signature de dll, vous pouvez vous référer ici

1
Karthikeyan VK

La signature et l’assemblage sont importants. Afin de garantir que le fichier exe ou Assemblée qui est installé sur ce PC uniquement.

C'est à dire: si vous copiez ce dossier et le mettez dans un autre PC, cela ne fonctionnera pas. puisqu'il connecte cette Assemblée à cette machine uniquement.

0
Ram Kumar

En plus des réponses existantes, j'ajouterais que vous devez utiliser la signature lorsque votre DLL va être chargée et utilisée de manière dynamique par un logiciel tiers. Ce n’est pas une exigence technique en soi, mais il est rationnel, donc très courant, que le producteur de logiciel tiers applique cette politique pour des raisons de sécurité. 

Exemples où vous devez signer une assemblée:

  • développement de l'extension Windows Shell/Windows Explorer, comme: extension du menu contextuel pour Windows Explorer
  • développement d'extensions Visual Studio, comme: Projet/Item Template Wizard GUI
0
hardyVeles