Share via


Temporisation de signature d'un assembly

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 paramètre à son constructeur. Par exemple :

      <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
      <Assembly:AssemblyDelaySignAttribute(True)>
      
      [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
    
    Remarque AttentionAttention

    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 ajouté à la liste des omissions de vérification pour usurper son identité.Cela permet également à l'assembly malveillant d'ignorer la vérification.

    RemarqueRemarque

    Si vous utilisez la temporisation de signature lorsque vous développez avec Visual Studio sur un ordinateur 64 bits, et que vous compilez un assembly pour n'importe quelle UC (Any CPU), vous devrez peut-être appliquer l'option -Vr deux fois.(Dans Visual Studio, Any CPU est une valeur de la propriété de build Plateforme cible ; lorsque vous compilez à partir de la ligne de commande, c'est la valeur par défaut.) Pour exécuter votre application à partir de la ligne de commande ou de l'Explorateur Windows, utilisez la version 64 bits de Sn.exe (outil Strong Name Tool) pour appliquer l'option -Vr à l'assembly.Pour charger l'assembly dans Visual Studio au moment du design (par exemple, si l'assembly contient des composants utilisés par d'autres assemblys dans votre application), utilisez la version 32 bits de l'outil Strong Name Tool.Ceci s'explique par le fait que le compilateur juste-à-temps (JIT) compile l'assembly en code natif 64 bits lorsque l'assembly est exécuté à partir de la ligne de commande, et en code natif 32 bits lorsque l'assembly est chargé dans l'environnement au moment du design.

  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

Référence

Sn.exe (outil Strong Name Tool)

Concepts

Création d'assemblys

Autres ressources

Programmation à l'aide d'assemblys