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?
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.
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.
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é.
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
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.
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: