Esempio di firma degli assembly

Nell'esempio seguente viene illustrato come generare un assembly side-by-side firmato costituito dal manifesto dell'assembly, dal catalogo di verifica e dai file di assembly. Gli assembly condivisi side-by-side devono essere firmati. Il sistema operativo verifica la firma dell'assembly prima di installare un assembly condiviso nell'archivio side-by-side globale (WinSxS). Ciò rende difficile eseguire lo spoofing dell'autore dell'assembly side-by-side.

Si noti che la modifica dei file di assembly o del contenuto del manifesto dopo la generazione del catalogo assembly invalida il catalogo e l'assembly. Se è necessario aggiornare i file di assembly o il manifesto dopo aver creato e firmato il catalogo, è necessario firmare nuovamente l'assembly e generare un nuovo catalogo.

Iniziare con i file di assembly, il manifesto dell'assembly e il file di certificato che verrà usato per firmare l'assembly. Il file di certificato deve essere di 2048 bit o superiore. Non è necessario usare un certificato attendibile. Il certificato viene usato solo per verificare che l'assembly non sia stato danneggiato.

Eseguire l'utilità Pktextract.exe fornita in Microsoft Windows Software Development Kit (SDK) per estrarre il token di chiave pubblica dal file del certificato. Per il corretto funzionamento di Pktextract, il file del certificato deve essere presente nella stessa directory dell'utilità. Usare il valore del token di chiave pubblica estratto per aggiornare l'attributo publicKeyToken dell'elemento assemblyIdentity nel file manifesto.

Di seguito è riportato un esempio di file manifesto denominato MySampleAssembly.manifest. L'assembly MySampleAssembly contiene un solo file, MYFILE.DLL. Si noti che il valore per l'attributo publicKeyToken dell'elemento assemblyIdentity è stato aggiornato con il valore del token di chiave pubblica.

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

Eseguire quindi l'utilità Mt.exe fornita in Windows SDK. I file di assembly devono trovarsi nella stessa directory del manifesto. In questo esempio si tratta della directory MySampleAssembly. Chiamare Mt.exe per l'esempio come indicato di seguito:

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

Ecco come viene eseguito il manifesto di esempio dopo l'esecuzione di Mt.exe. Si noti che l'esecuzione di Mt.exe con l'opzione hashupdate aggiunge l'hash SHA-1 del file. Non modificare questo valore.

<?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'esecuzione di Mt.exe con l'opzione -makecdfs genera un file denominato MySampleAssembly.manifest.cdf che descrive il contenuto del catalogo di sicurezza che verrà usato per convalidare il manifesto.

Il passaggio successivo consiste nell'eseguire Makecat.exe su questo file con estensione cdf per creare il catalogo di sicurezza per l'assembly. La chiamata a Makecat.exe per questo esempio viene visualizzata come segue:

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

Il passaggio finale consiste nell'eseguire SignTool.exe per firmare il file di catalogo con il certificato. Deve essere lo stesso certificato usato in precedente per generare il token di chiave pubblica. Per altre informazioni su SignTool.exe vedere l'argomento SignTool . La chiamata a SignTool per l'esempio viene visualizzata come segue:

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

Se si dispone di un certificato digitale autenticato e l'autorità di certificazione usa il formato di file PVK per archiviare la chiave privata, è possibile usare l'utilità di importazione di file di certificato digitale PVK (pvkimprt.exe) per importare la chiave nel provider di servizi di crittografia (CSP). Questa utilità consente di esportare nel formato standard del settore PFX/P12.

Vedere anche Creazione di file e cataloghi firmati.