Compartilhar via


Criar e usar assemblies com nome forte

Um nome forte consiste na identidade do assembly — seu nome de texto simples, número de versão e informações de cultura (se fornecido)— além de uma chave pública e uma assinatura digital. Ele é gerado a partir de um arquivo de assembly usando a chave privada correspondente. (O arquivo de assembly contém o manifesto do assembly, que contém os nomes e hashes de todos os arquivos que compõem o assembly.)

Aviso

Não confie em nomes fortes para segurança. Eles fornecem apenas uma identidade exclusiva.

Um assembly de nome forte só pode usar tipos de outros assemblies de nome forte. Caso contrário, a integridade do assembly com nome forte será comprometida.

Observação

Embora o .NET Core dê suporte a assemblies de nome forte e todos os assemblies na biblioteca do .NET Core sejam assinados, a maioria dos assemblies de terceiros não precisa de nomes fortes. Para obter mais informações, consulte Strong Name Signing on GitHub.

Cenário de nome forte

O cenário a seguir descreve o processo de assinatura de um assembly com um nome forte e, posteriormente, de referência a ele por esse nome.

  1. O Assembly A é criado com um nome forte usando um dos seguintes métodos:

    • Usando um ambiente de desenvolvimento que dá suporte à criação de nomes fortes, como o Visual Studio.

    • Criar um par de chaves criptográficas usando a ferramenta Nome Forte (Sn.exe) e atribuir esse par de chaves ao assembly usando um compilador de linha de comando ou o Vinculador de Assembly (Al.exe). O SDK do Windows fornece Sn.exe e Al.exe.

  2. O ambiente de desenvolvimento ou a ferramenta assina o hash do arquivo que contém o manifesto do assembly com a chave privada do desenvolvedor. Essa assinatura digital é armazenada no arquivo PE (executável portátil) que contém o manifesto do Assembly A.

  3. O Assembly B é um consumidor do Assembly A. A seção de referência do manifesto do Assembly B inclui um token que representa a chave pública do Assembly A. Um token é uma parte da chave pública completa e é usado em vez da própria chave para economizar espaço.

  4. O common language runtime verifica a assinatura de nome forte quando o assembly é colocado no cache de assembly global. Ao vincular por nome forte no runtime, o common language runtime compara a chave armazenada no manifesto do Assembly B com a chave usada para gerar o nome forte do Assembly A. Se as verificações de segurança do .NET forem aprovadas e a vinculação for bem-sucedida, o Assembly B terá uma garantia de que os bits do Assembly A não foram adulterados e que esses bits realmente provêm dos desenvolvedores do Assembly A.

Observação

Esse cenário não aborda problemas de confiança. As assemblies podem carregar assinaturas completas do Microsoft Authenticode, além de um nome forte. As assinaturas de authenticode incluem um certificado que estabelece a confiança. É importante observar que nomes fortes não exigem que o código seja assinado dessa maneira. Nomes fortes fornecem apenas uma identidade exclusiva.

Ignorar a verificação de assinatura de assemblies confiáveis

A partir do .NET Framework 3.5 Service Pack 1, as assinaturas de nome forte não são validadas quando um assembly é carregado em um domínio de aplicativo de confiança total, como o domínio de aplicativo padrão para a MyComputer zona. Isso é conhecido como o recurso de bypass de nome forte. Em um ambiente de confiança total, as demandas por StrongNameIdentityPermission sempre são bem-sucedidas para assemblies assinados e de confiança total, independentemente de sua assinatura. O recurso de bypass de nome forte evita a sobrecarga desnecessária da verificação de assinatura de nome forte em assemblies com confiança total nessa situação, permitindo que os assemblies sejam carregados mais rapidamente.

O recurso de bypass se aplica a qualquer assembly assinado com um nome forte e que tenha as seguintes características:

  • Totalmente confiável sem StrongName evidência (por exemplo, tem MyComputer evidência de zona).

  • Carregado em um totalmente confiável AppDomain.

  • Carregado de um local sob a ApplicationBase propriedade desse AppDomain.

  • Não assinado com atraso.

Esse recurso pode ser desabilitado para aplicativos individuais ou para um computador. Veja como desabilitar o recurso de ignorar strong-name.

Title Description
Como criar um par de chaves público-privada Descreve como criar um par de chaves criptográficas para assinar um assembly.
Como assinar um assembly com um nome forte Descreve como criar um assembly de nome forte.
Nomenclatura forte aprimorada Descreve aprimoramentos para nomes fortes no .NET Framework 4.5.
Como referenciar um assembly de nome forte Descreve como referenciar tipos ou recursos em um assembly de nome forte em tempo de compilação ou tempo de execução.
Como desabilitar o recurso de bypass de nome forte Descreve como desabilitar o recurso que ignora a validação de assinaturas de nome forte. Esse recurso pode ser desabilitado para todos ou para aplicativos específicos.
Criar assemblies Fornece uma visão geral sobre conjuntos de arquivo único e conjuntos de vários arquivos.
Como atrasar a assinatura de um assembly no Visual Studio Explica como assinar um assembly com um nome forte após a criação do assembly.
Sn.exe (Ferramenta Nome Forte) Descreve a ferramenta incluída no .NET Framework que ajuda a criar assemblies com nomes fortes. Essa ferramenta fornece opções para gerenciamento de chaves, geração de assinatura e verificação de assinatura.
Al.exe (vinculador de assembly) Descreve a ferramenta incluída no .NET Framework que gera um arquivo contendo um manifesto de assembly a partir de módulos ou arquivos de recurso.