Compartilhar via


Atraso na Assinatura de um Assembly

Uma organização pode ter par de chaves bem protegido que os desenvolvedores não têm acesso diário. A chave pública geralmente está disponível, mas o acesso a chave privada é restrito a apenas alguns indivíduos. Ao desenvolver conjuntos de módulos com nomes de alta segurança, cada conjunto que referencia destinos de conjuntos com nome de alta segurança contém o símbolo do chave pública usado para fornecer um nome de alta segurança ao assembly em questão. Isso requer que a chave pública esteja disponível durante o processo de desenvolvimento.

Você pode usar a autenticação atrasada ou parcial no tempo de compilação para reservar espaço no arquivo executável portátil (PE) para a assinatura de nome com alta segurança, mas adiar a autenticação real até algum estágio posterior (normalmente antes de entregar o assembly).

As seguintes etapas descrevem o processo de autenticar com atraso um conjunto de módulos (assembly):

  1. Obtenha a parte da chave pública do pat de chaves que a organização que fará a eventual assinatura. Normalmente essa chave está no formato de um arquivo .snk, que pode ser criado usando a ferramenta Strong Name (Sn.exe) fornecida pelo Windows Software Development Kit (SDK).

  2. Anote o código-fonte para o assembly com dois atributos personalizados de System.Reflection:

    • AssemblyKeyFileAttribute, que passa o nome do arquivo que contém a chave pública como um parâmetro para seu construtor.

    • AssemblyDelaySignAttribute, que indica que a assinatura atrasada está sendo usado, passando true como um parâmetro para o construtor. Por exemplo:

      <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
      <Assembly:AssemblyDelaySignAttribute(True)>
      
      [assembly:AssemblyKeyFileAttribute("myKey.snk")]
      [assembly:AssemblyDelaySignAttribute(true)]
      
      [assembly:AssemblyKeyFileAttribute("myKey.snk")];
      [assembly:AssemblyDelaySignAttribute(true)];
      
  3. O compilador insere a chave pública no manifesto do assembly e reserva espaço no arquivo PE para a assinatura completa com nome de alta segurança. A chave pública real deve ser armazenada enquanto o assembly é compilado para que outros conjuntos que fazem referência a este conjunto de módulos (assembly) possam obter a chave para armazenar em sua própria referência de assembly.

  4. Porque o assembly não tem uma assinatura válida com nome de alta segurança, a verificação dessa assinatura deve ser desativada. Você pode fazer isso usando a opção –VR com a ferramenta Strong Name.

    O exemplo a seguir desativa a verificação para um conjunto de módulos (assembly) denominado myAssembly.dll.

    sn –Vr myAssembly.dll
    

    Observação

    Use a opção -VR somente durante o desenvolvimento.Adicionar um conjunto de módulos à lista de ignorar verificação cria uma vulnerabilidade na segurança.Um assembly mal-intencionado poderia usar o nome de assembly totalmente especificado (nome de assembly, versão, cultura e símbolo de chave pública) do conjunto adicionado à lista de ignorar verificação para forjar sua identidade.Isso permitiria que o conjunto mal-intencionado também ignorasse a verificação.

    Observação

    Se você usar o atraso de assinatura durante o desenvolvimento com Visual Studio em um computador de 64 bits e compilar um assembly para Qualquer CPU, talvez você precise aplicar o -Vr opção duas vezes.(Em Visual Studio, Qualquer CPU é um valor da Plataforma de destino criar propriedade; Quando você compilar na linha de comando, ele é o padrão.) Para executar o aplicativo a partir da linha de comando ou do Windows Explorer, use a versão de 64 bits da Sn. exe (ferramenta de nome forte) para aplicar o -Vr opção para o assembly.Para carregar o assembly em Visual Studio em tempo de design (por exemplo, se o assembly contém componentes que são usados por outros assemblies em seu aplicativo), use a versão de 32 bits da ferramenta nome forte.Isso ocorre porque o compilador just-in-time (JIT) compila o assembly para código nativo de 64 bits quando o assembly é executado a partir da linha de comando e para código nativo de 32 bits quando o conjunto é carregado no ambiente de tempo de design.

  5. Posteriormente, normalmente apenas antes da remessa, envie o conjunto de módulos (assembly) para a autoridade de autenticação de sua organização para a assinatura de nome com alta segurança usando a opção – R com a ferramenta Strong Name.

    O exemplo a seguir assina um conjunto de módulos (assembly) denominado myAssembly.dll com um nome de alta segurança usando o par de chaves sgKey.snk.

    sn -R myAssembly.dll sgKey.snk
    

Consulte também

Tarefas

Como: Criar um par de chaves pública/particular

Referência

Sn. exe (ferramenta de nome forte)

Conceitos

Criando assemblies

Outros recursos

Programação com assemblies