Gerenciar assinatura de assembly e de manifesto

A assinatura de nome forte fornece a um componente de software uma identidade global exclusiva. Nomes fortes são usados para assegurar que o assembly não possa ser falsificado por outra pessoa e para assegurar que as dependências do componente e as instruções de configuração sejam mapeadas para o componente e a versão do componente corretos.

Um nome forte consiste na identidade do assembly (nome de texto simples, número de versão e informações de cultura), além de um token de chave pública e uma assinatura digital.

Para obter informações sobre como assinar assemblies em projetos do Visual Basic e do C#, confira Criar e usar assemblies de nomes fortes.

Para obter informações de como assinar assemblies em projetos do C++, confira Assemblies de nome forte (C++/CLI).

Observação

A assinatura de nome forte não protege contra a engenharia reversa do assembly. Para se proteger contra a engenharia reversa, confira a Dotfuscator Community.

Tipos de ativo e assinatura

Você pode assinar os manifestos de aplicativo e assemblies do .NET:

  • Executáveis (.exe)

  • Manifestos de aplicativo (.exe.manifest)

  • Manifestos de implantação (.application)

  • Assemblies do componente compartilhado (.dll)

Assine os seguintes tipos de ativo:

  1. assemblies, se você desejar implantá-los no cache de assembly global (GAC).

  2. Manifestos de aplicativo e de implantação do ClickOnce. O Visual Studio permite a assinatura por padrão desses aplicativos.

  3. Assemblies de interoperabilidade primários, que são usados para a interoperabilidade COM. O utilitário TLBIMP impõe uma nomenclatura forte ao criar um assembly de interoperabilidade primário com base em uma biblioteca de tipos COM.

Em geral, você não deve assinar executáveis. Um componente de nome forte não pode referenciar um componente que não tem um nome forte implantado com o aplicativo. O Visual Studio não assina executáveis do aplicativo, mas em vez disso, assina o manifesto do aplicativo, que aponta para o executável de nome fraco. Evite assinar componentes particulares do aplicativo, pois sua assinatura pode dificultar o gerenciamento de dependências.

Como assinar um assembly no Visual Studio

O procedimento para assinar um assembly depende da versão do Designer de Projeto que seu projeto usa.

Para projetos em C# do .NET Core (e .NET 5 e posteriores) no Visual Studio 2022:

  1. Abra a janela de propriedades do projeto (clique com o botão direito do mouse no nó do projeto no Gerenciador de soluções e selecione Propriedades).
  2. Em Compilar, localize Nome forte e marque a caixa de seleção Assinar o assembly. Opções adicionais para o arquivo de chave e a assinatura de atraso aparecem quando você marca a caixa.
  3. Especifique um arquivo de chave. Se você optar por criar um arquivo de chave, os novos arquivos de chave sempre serão criados no formato .pfx. É necessário um nome e uma senha para o novo arquivo.

Para projetos .NET Framework e Visual Basic no Visual Studio 2022 ou no Visual Studio 2019:

  1. Abra a guia Assinatura da janela de propriedades do projeto (clique com o botão direito do mouse no nó do projeto no Gerenciador de soluções e selecione Propriedades). Selecione a guia Assinatura.
  2. Marque a caixa de seleção Assinar o assembly.
  3. Especifique um arquivo de chave. Se você optar por criar um arquivo de chave, os novos arquivos de chave sempre serão criados no formato .pfx. É necessário um nome e uma senha para o novo arquivo.

Aviso

Você sempre deve proteger o arquivo de chave com uma senha para evitar o uso por outra pessoa. Também é possível proteger as chaves usando provedores ou repositórios de certificados.

Você também pode apontar para uma chave já criada. Para obter mais informações de como criar chaves, confira Criar um par de chaves pública/privada.

Se você só tiver acesso a uma chave pública, use a assinatura com atraso para adiar a atribuição da chave. Habilite a assinatura com atraso selecionando a caixa de seleção Somente sinal de atraso. Um projeto assinado com atraso não é executado e não pode ser depurado. No entanto, você pode ignorar a verificação durante o desenvolvimento usando a ferramenta de nome forte Sn.exe com a opção -Vr.

Para obter informações sobre como assinar manifestos, confira Como assinar manifestos de aplicativo e de implantação.