Exemple de signature d’assembly

L’exemple suivant explique comment générer un assembly côte à côte signé composé du manifeste d’assembly, du catalogue de vérification et des fichiers d’assembly. Les assemblys côte à côte partagés doivent être signés. Le système d’exploitation vérifie la signature de l’assembly avant d’installer un assembly partagé dans le magasin global côte à côte (WinSxS). Cela rend difficile l’usurpation de l’éditeur de l’assembly côte à côte.

Notez que la modification des fichiers d’assembly ou du contenu du manifeste après avoir généré le catalogue d’assemblys invalide le catalogue et l’assembly. Si vous devez mettre à jour les fichiers d’assembly ou le manifeste après avoir créé et signé le catalogue, vous devez à nouveau signer l’assembly et générer un nouveau catalogue.

Commencez par les fichiers d’assembly, le manifeste d’assembly et le fichier de certificat que vous allez utiliser pour signer l’assembly. Le fichier de certificat doit avoir 2 048 bits ou plus. Vous n’êtes pas obligé d’utiliser un certificat approuvé. Le certificat est utilisé uniquement pour vérifier que l’assembly n’a pas été endommagé.

Exécutez l’utilitairePktextract.exe fourni dans le Kit de développement logiciel (SDK) Microsoft Windows pour extraire le jeton de clé publique du fichier de certificat. Pour que Pktextract fonctionne correctement, le fichier de certificat doit être présent dans le même répertoire que l’utilitaire. Utilisez la valeur du jeton de clé publique extraite pour mettre à jour l’attribut publicKeyToken de l’élément assemblyIdentity dans le fichier manifeste.

Voici un exemple de fichier manifeste nommé MySampleAssembly.manifest. L’assembly MySampleAssembly ne contient qu’un seul fichier, MYFILE.DLL. Notez que la valeur de l’attribut publicKeyToken de l’élément assemblyIdentity a été mise à jour avec la valeur du jeton de clé publique.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name="Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"/>
</assembly>

Exécutez ensuite l’utilitaire Mt.exe fourni dans le KIT de développement logiciel (SDK) Windows. Les fichiers d’assembly doivent se trouver dans le même répertoire que le manifeste. Dans cet exemple, il s’agit du répertoire MySampleAssembly. Appelez Mt.exe pour l’exemple comme suit :

C:\ MySampleAssembly>mt.exe -manifest MySampleAssembly.manifest -hashupdate -makecdfs

Voici comment l’exemple de manifeste prend en charge après l’exécution de Mt.exe. Notez que l’exécution de Mt.exe avec l’option hashupdate ajoute le hachage SHA-1 du fichier. Ne modifiez pas cette valeur.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity 
        type="win32" 
        name=" Microsoft.Windows.MySampleAssembly" 
        version="1.0.0.0" 
        processorArchitecture="x86"         
        publicKeyToken="0000000000000000"/>
    <file name="myfile.dll"
hash="a1d362d6278557bbe965a684ac7adb4e57427a29" hashalg="SHA1"/>
</assembly>

L’exécution de Mt.exe avec l’option -makecdfs génère un fichier nommé MySampleAssembly.manifest.cdf qui décrit le contenu du catalogue de sécurité qui sera utilisé pour valider le manifeste.

L’étape suivante consiste à exécuter Makecat.exe sur ce fichier .cdf pour créer le catalogue de sécurité pour l’assembly. L’appel à Makecat.exe pour cet exemple s’affiche comme suit :

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

La dernière étape consiste à exécuter SignTool.exe pour signer le fichier catalogue avec le certificat. Il doit s’agir du même certificat que celui utilisé dans le précédent pour générer le jeton de clé publique. Pour plus d’informations sur SignTool.exe consultez la rubrique SignTool . L’appel à SignTool pour l’exemple s’affiche comme suit :

c:\MySampleAssembly>signtool signtool /f <fullpath>mycompany.pfx /du https://www.mycompany.com/MySampleAssembly /t https://timestamp.digicert.com MySampleAssembly.cat

Si vous disposez d’un certificat numérique authentifié et que votre autorité de certification utilise le format de fichier PVK pour stocker la clé privée, vous pouvez utiliser l’importateur de fichiers de certificat numérique PVK (pvkimprt.exe) pour importer la clé dans votre fournisseur de services de chiffrement (CSP). Cet utilitaire vous permet d’exporter vers le format standard de PFX/P12. Pour plus d’informations sur l’importateur de fichiers de certificat numérique PVK, consultez la section Ressources de déploiement de la bibliothèque MSDN ou contactez votre autorité de certification.

Voir également Création de fichiers et de catalogues signés.