Partager via


Exemple de signature d’assembly

L’exemple suivant explique comment générer un assembly côte à côte signé comprenant le manifeste de l’assembly, le catalogue de vérification et les fichiers de l’assembly. Les assemblies 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 côte à côte global (WinSxS). Cela rend difficile l’usurpation de l’éditeur de l’assembly côte à côte.

Notez que la modification des fichiers de l’assembly ou du contenu du manifeste après la génération du catalogue de l’assembly invalide le catalogue et l’assembly. Si vous devez mettre à jour les fichiers de l’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 avec les fichiers de l’assembly, le manifeste de l’assembly et le fichier de certificat que vous utiliserez pour signer l’assembly. Le fichier de certificat doit être de 2048 bits ou plus. Vous n’êtes pas tenu d’utiliser un certificat de confiance. Le certificat est utilisé uniquement pour vérifier que l’assembly n’a pas été endommagé.

Exécutez l’utilitaire Pktextract.exe fourni dans le Microsoft Windows Software Development Kit (SDK) 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 extrait 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 contient 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>

Ensuite, exécutez l’utilitaire Mt.exe fourni dans le Windows SDK. Les fichiers de l’assembly doivent être situés 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 à quoi ressemble le manifeste de l’exemple après avoir exécuté Mt.exe. Remarquez que l’exécution de Mt.exe avec l’option hashupdate ajoute le hachage SHA-1 du fichier. Ne changez 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 .cdf pour créer le catalogue de sécurité pour l’assembly. L’appel à Makecat.exe pour cet exemple apparaîtrait comme suit :

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

L’étape finale consiste à exécuter SignTool.exe pour signer le fichier catalogue avec le certificat. Cela devrait être le même certificat que celui utilisé précédemment pour générer le jeton de clé publique. Pour plus d’informations sur SignTool.exe, veuillez consulter la section SignTool. L’appel à SignTool pour l’exemple apparaîtrait comme suit :

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

Si vous avez 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 certificats numériques PVK (pvkimprt.exe) pour importer la clé dans votre fournisseur de services cryptographiques (CSP). Cet utilitaire vous permet d’exporter vers le format standard de l’industrie PFX/P12.

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