Compartilhar via


Exemplo de assinatura de assembly

O exemplo a seguir discute como gerar um assembly lado a lado assinado, que consiste no manifesto assembly, no catálogo de verificação e nos arquivos assemblies. Os assemblies lado a lado compartilhados devem ser assinados. O sistema operacional verifica a assinatura do assembly antes de instalar um assembly compartilhado no repositório lado a lado global (WinSxS). Isso dificulta a falsificação do editor do assembly lado a lado.

Observe que alterar os arquivos de assembly ou o conteúdo do manifesto depois de gerar o catálogo de assembly invalida o catálogo e o assembly. Se você precisar atualizar os arquivos de assembly ou o manifesto depois de criar e assinar o catálogo, deverá assinar novamente o assembly e gerar um novo catálogo.

Comece com os arquivos de assembly, o manifesto do assembly e o arquivo de certificado que você usará para assinar o assembly. O arquivo de certificado deve ter 2048 bits ou mais. Você não é obrigado a usar um certificado confiável. O certificado é usado apenas para verificar se o conjunto não foi danificado.

Execute o utilitário Pktextract.exe fornecido no Software Development Kit (SDK) do Microsoft Windows para extrair o token de chave pública do arquivo de certificado. Para que o Pktextract funcione corretamente, o arquivo de certificado deve estar presente no mesmo diretório que o utilitário. Use o valor do token da chave pública extraída para atualizar o publicKeyToken atributo do elemento assemblyIdentity no manifesto do arquivo.

Aqui está o exemplo de um arquivo de manifesto chamado MySampleAssembly.manifest. O assembly MySampleAssembly contém apenas um arquivo, o MYFILE.DLL. Observe que o valor do publicKeyToken atributo do assemblyIdentity foi atualizado com o valor do token de chave 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>

Em seguida, execute o utilitário Mt.exe fornecido no SDK do Windows. Os arquivos de assembly devem estar localizados no mesmo diretório que o manifesto. Neste exemplo, este é o diretório MySampleAssembly. Chame Mt.exe para o exemplo da seguinte maneira:

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

Veja como o exemplo do manifesto fica depois de executar Mt.exe. Observe que a execução de Mt.exe com a opção hashupdate adiciona o hash SHA-1 do arquivo. Não altere esse 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>

A execução Mt.exe com a opção -makecdfs gera um arquivo chamado MySampleAssembly.manifest.cdf que descreve o conteúdo do catálogo de segurança que será usado para validar o manifesto.

A próxima etapa é executar Makecat.exe sobre esse .cdf para criar o catálogo de segurança para o assembly. A chamada ao Makecat.exe para esse exemplo seria a seguinte:

c:\MySampleAssembly>makecat MySampleAssembly.manifest.cdf

A etapa final é executar SignTool.exe para assinar o arquivo de catálogo com o certificado. Esse deve ser o mesmo certificado usado anteriormente para gerar o token de chave pública. Para obter mais informações sobre SignTool.exe consulte o tópico SignTool. A chamada para o exemplo SignTool seria exibida da seguinte maneira:

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

Se você tiver um certificado digital autenticado e sua autoridade de certificação usar o formato de arquivo PVK para armazenar a chave privada, você poderá usar o Importador de Arquivos de Certificado Digital PVK (pvkimprt.exe) para importar a chave para seu provedor de serviços criptográficos (CSP). Esse utilitário habilita exportar para o formato padrão da indústria de PFX/P12.

Consulte também Criar arquivos e catálogos assinados.