Compartir a través de


Ejemplo de firma de ensamblado

En el ejemplo siguiente se describe cómo generar un ensamblado en paralelo firmado que incluya el manifiesto del ensamblado, el catálogo de comprobación y los archivos de ensamblado. Los ensamblados en paralelo compartidos deben estar firmados. El sistema operativo comprueba la firma del ensamblado antes de instalar un ensamblado compartido en el almacén global en paralelo (WinSxS). Esto dificulta la suplantación del editor del ensamblado en paralelo.

Tenga en cuenta que si se cambian los archivos de ensamblado o el contenido del manifiesto después de generar el catálogo de ensamblados, se invalidará el catálogo y el ensamblado. Si debe actualizar los archivos de ensamblado o el manifiesto después de crear y firmar el catálogo, deberá firmar de nuevo el ensamblado y generar un nuevo catálogo.

Comience con los archivos de ensamblado, el manifiesto de ensamblado y el archivo del certificado que usará para firmar el ensamblado. El archivo del certificado debe tener 2048 bits o más. No es necesario usar un certificado de confianza. El certificado solo sirve para comprobar que el ensamblado no se ha dañado.

Ejecute la utilidad Pktextract.exe incluida en el Kit de desarrollo de software (SDK) de Microsoft Windows para extraer el token de clave pública del archivo del certificado. Para que Pktextract funcione debidamente, el archivo del certificado debe estar en el mismo directorio que la utilidad. Use el valor del token de clave pública extraído para actualizar el atributo publicKeyToken del elemento assemblyIdentity en el archivo de manifiesto.

Este es un ejemplo de un archivo de manifiesto denominado MySampleAssembly.manifest. El ensamblado MySampleAssembly contiene solo un archivo, MYFILE.DLL. Tenga en cuenta que el valor del atributo publicKeyToken del elemento assemblyIdentity se ha actualizado con el valor del token de clave pública.

<?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>

Después, ejecute la utilidad Mt.exe incluida en el SDK de Windows. Los archivos de ensamblado deben ubicarse en el mismo directorio que el manifiesto. En este ejemplo se presenta el directorio MySampleAssembly. Llame a Mt.exe del ejemplo según se indica a continuación:

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

Así es como debe verse el manifiesto de ejemplo después de ejecutar Mt.exe. Tenga en cuenta que si se ejecutar Mt.exe con la opción hashupdate, se agregará el hash SHA-1 del archivo. No cambie este valor.

<?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>

Al ejecutar Mt.exe con la opción -makecdfs, se generará un archivo denominado MySampleAssembly.manifest.cdf que describe el contenido del catálogo de seguridad que se usará para validar el manifiesto.

El siguiente paso consiste en ejecutar Makecat.exe en este .cdf para crear el catálogo de seguridad para el ensamblado. La llamada a Makecat.exe en este ejemplo se vería de la siguiente manera:

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

El último paso sería ejecutar SignTool.exe para firmar el archivo de catálogo con el certificado. Debe ser el mismo certificado que se usó en el anterior para generar el token de clave pública. Para obtener más información sobre SignTool.exe, consulte el tema SignTool. La llamada a SignTool del ejemplo se vería de la siguiente manera:

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

Si tiene un certificado digital autenticado y la entidad de certificación usa el formato de archivo PVK para almacenar la clave privada, puede usar el importador de archivos de certificados digitales PVK (pvkimprt.exe) para importar la clave en el proveedor de servicios criptográficos (CSP). Esta utilidad le permite exportarlo al formato normativo del sector de PFX/P12.

Consulte también Crear archivos firmados y catálogos.