Partilhar via


Criar e usar assemblies de 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 assembly usando a chave privada correspondente. (O arquivo 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 a segurança. Eles fornecem apenas uma identidade única.

Um assembly de nome forte só pode usar tipos de outros assemblies de nome forte. Caso contrário, a integridade da assembleia de nome forte seria comprometida.

Nota

Embora o .NET Core ofereça 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 Assinatura de nome forte no GitHub.

Cenário de nome forte

O cenário a seguir descreve o processo de assinar um assembly com um nome forte e, posteriormente, fazer 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 oferece suporte à criação de nomes fortes, como 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 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 executável portátil (PE) que contém o manifesto do Assembly A.

  3. A Assembleia B é consumidora da Assembleia A. A seção de referência do manifesto da Assembleia B inclui um token que representa a chave pública da Assembleia A. Um token é uma parte da chave pública completa e é usado em vez da chave em si 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 em tempo de execução, o common language runtime compara a chave armazenada no manifesto do Assembly B com a chave usada para gerar o nome forte para o Assembly A. Se as verificações de segurança do .NET forem aprovadas e a ligaçã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 vêm dos desenvolvedores do Assembly A.

Nota

Este cenário não resolve problemas de confiança. Os assemblies podem ter assinaturas completas do Microsoft Authenticode, além de um nome forte. As assinaturas Authenticode incluem um certificado que estabelece confiança. É importante notar que nomes fortes não exigem que o código seja assinado dessa maneira. Nomes fortes apenas fornecem uma identidade única.

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 de 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 de assemblies de confiança total nessa situação, permitindo que os assemblies sejam carregados mais rapidamente.

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

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

  • Carregado em um arquivo AppDomain.

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

  • Não assinado com atraso.

Este recurso pode ser desativado para aplicativos individuais ou para um computador. Consulte Como: Desativar o recurso de bypass de nome forte.

Title Description
Como: Criar um par de chaves público-privado 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: Fazer referência a um assembly de nome forte Descreve como fazer referência a tipos ou recursos em um assembly de nome forte em tempo de compilação ou tempo de execução.
Como: Desativar o recurso de bypass de nome forte Descreve como desabilitar o recurso que ignora a validação de assinaturas de nome forte. Este recurso pode ser desativado para todos ou para aplicativos específicos.
Criar assemblies Fornece uma visão geral de assemblies de arquivo único e multiarquivo.
Como atrasar a assinatura de um assembly no Visual Studio Explica como assinar um assembly com um nome forte após o assembly ter sido criado.
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 assinaturas e verificação de assinaturas.
Al.exe (Vinculador de montagem) Descreve a ferramenta incluída no .NET Framework que gera um arquivo que tem um manifesto de assembly de módulos ou arquivos de recurso.