Partage via


Temporiser la signature d’un assembly

Une organisation peut avoir une paire de clés étroitement protégée que les développeurs ne peuvent pas accéder quotidiennement. La clé publique est souvent disponible, mais l’accès à la clé privée n’est limité qu’à quelques personnes. Lors du développement d’assemblages avec des noms sécurisés, chaque assemblage qui fait référence à l’assemblage cible au nom fort contient le jeton de la clé publique utilisée pour fournir à l’assemblage cible un nom sécurisé. Cela nécessite que la clé publique soit disponible pendant le processus de développement.

Vous pouvez utiliser la signature différé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 jusqu’à une étape ultérieure, généralement juste avant d’expédier l’assembly.

Pour temporiser la signature d’un assembly :

  1. Obtenez la partie clé publique de la paire de clés auprès de la société qui effectuera la signature. 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 Nom fort (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 à partir de System.Reflection:

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

    • AssemblyDelaySignAttribute, qui indique que le délai de signature est utilisé 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)]
    
    <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 complète. La clé publique réelle doit être stockée pendant la génération de l’assemblage afin que d'autres assemblages qui le référencent puissent obtenir la clé pour la stocker dans leur propre référence d'assemblage.

  4. Étant donné que le module n’a pas de signature de nom fort valide, la vérification de cette signature doit être désactivée. Pour ce faire, utilisez l’option -Vr avec l’outil Nom fort.

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

    sn -Vr myAssembly.dll
    

    Pour désactiver la vérification sur les plateformes où vous ne pouvez pas exécuter l’outil Nom fort, tel que les microprocesseurs ADVANCED RISC Machine (ARM), utilisez l’option -Vk pour créer un fichier de Registre. Importez le fichier de registre dans le registre sur l'ordinateur où vous souhaitez désactiver la vérification. L’exemple suivant crée un fichier de Registre pour myAssembly.dll.

    sn -Vk myRegFile.reg myAssembly.dll
    

    Avec l’option -Vr ou -Vk , vous pouvez éventuellement inclure un fichier .snk pour la signature de clé de test.

    Avertissement

    Ne vous fiez pas à des noms forts pour la sécurité. Ils fournissent une identité unique uniquement.

    Remarque

    Si vous utilisez la signature différée pendant le développement avec Visual Studio sur un ordinateur 64 bits et que vous compilez un assembly pour n’importe quel processeur, vous devrez peut-être appliquer l’option -Vr deux fois. (Dans Visual Studio, n’importe quel processeur est une valeur de la propriété de build Cible de plateforme ; lorsque vous compilez à partir de la ligne de commande, il s’agit de la valeur par défaut.) Pour exécuter votre application à partir de la ligne de commande ou de l’Explorateur de fichiers, utilisez la version 64 bits de l' Sn.exe (outil Strong Name) 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 de votre application), utilisez la version 32 bits de l’outil de nom fort. Cela est dû au 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 au code natif 32 bits lorsque l’assembly est chargé dans l’environnement au moment du design.

  5. Plus tard, généralement juste avant l’expédition, vous envoyez l’assembly à l’autorité de signature de votre organisation pour la signature de nom fort réelle à l’aide de l’option -R avec l’outil Nom fort.

    L’exemple suivant permet de signer une assembly appelée myAssembly.dll avec un nom fort à l’aide de la paire de clés sgKey.snk .

    sn -R myAssembly.dll sgKey.snk
    

Voir aussi