Share via


Temporisation de signature d'un assembly

Mise à jour : novembre 2007

Une société peut conserver sous protection une paire de clés à laquelle les développeurs n'ont pas accès quotidiennement. La clé publique est souvent disponible, mais l'accès à la clé privée est limité à quelques personnes. Lors du développement d'assemblys avec des noms forts, chaque assembly qui référence l'assembly avec nom fort cible contient le jeton de la clé publique utilisée pour affecter un nom fort à l'assembly cible. La clé publique doit donc être disponible pendant le processus de développement.

Vous pouvez utiliser la signature temporisée ou partielle au moment de la génération pour réserver de l'espace dans le fichier exécutable portable (PE) pour la signature de nom fort, mais différer la signature réelle à une étape ultérieure (généralement juste avant de livrer l'assembly).

Les étapes suivantes mettent en avant le processus de temporisation de la signature d'un assembly :

  1. Obtenez la clé publique de la paire de clés de la société qui effectuera la signature éventuelle. En règle générale, cette clé se présente sous la forme d'un fichier .snk, qui peut être créé à l'aide de l'outil Strong Name Tool (Sn.exe) fourni par le Kit de développement logiciel (SDK) Windows.

  2. Annotez le code source de l'assembly avec deux attributs personnalisés de System.Reflection :

    • AssemblyKeyFileAttribute, qui passe le nom du fichier contenant la clé publique en tant que paramètre à son constructeur.

    • AssemblyDelaySignAttribute, qui indique l'utilisation de la temporisation de signature en passant true en tant que paramètre à son constructeur. Par exemple :

          <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
          <Assembly:AssemblyDelaySignAttribute(true)>
      
          [assembly:AssemblyKeyFileAttribute("myKey.snk")]
          [assembly:AssemblyDelaySignAttribute(true)]
      
  3. Le compilateur insère la clé publique dans le manifeste d'assembly et réserve de l'espace dans le fichier PE pour la signature de nom fort complet. La clé publique réelle doit être stockée lors de la génération de l'assembly de sorte que d'autres assemblys référençant cet assembly puissent obtenir la clé à stocker dans leur propre référence d'assembly.

  4. Étant donné que l'assembly n'a pas de signature de nom fort valide, la vérification de cette signature doit être désactivée. Vous pouvez effectuer cette opération en utilisant l'option –Vr avec l'outil Strong Name Tool.

    L'exemple suivant désactive la vérification pour un assembly appelé myAssembly.dll.

    sn –Vr myAssembly.dll
    
    Attention :

    Utilisez l'option -Vr uniquement pendant le développement. L'ajout d'un assembly à la liste des omissions de vérification crée une faille de sécurité. Un assembly malveillant peut utiliser le nom complètement spécifié (nom, version, culture et jeton de clé publique de l'assembly) de l'assembly ajouté à la liste des omissions de vérification pour usurper son identité. Cela permet également à l'assembly malveillant d'ignorer la vérification.

  5. Vous soumettez l'assembly ultérieurement, généralement juste avant sa livraison, à l'Autorité de signature de la société pour la signature réelle de nom fort en utilisant l'option –R avec l'outil Strong Name Tool.

    L'exemple suivant signe un assembly appelé myAssembly.dll avec un nom fort à l'aide de la paire de clés sgKey.snk.

    sn -R myAssembly.dll sgKey.snk
    

Voir aussi

Tâches

Comment : créer une paire de clés publique/privée

Concepts

Création d'assemblys

Référence

Outil Strong Name Tool (Sn.exe)

Autres ressources

Programmation à l'aide d'assemblys