Share 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 o atraso na assinatura está sendo usado por passar TRUE como um parâmetro para o construtor.Por exemplo:

          <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
    
    Cuidado:

    Use o -VR opção 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.

  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 público / emparelhar de chaves emparelharticular

Conceitos

Criando assemblies

Referência

Ferramenta Strong Name (Sn.exe)

Outros recursos

Programação com assemblies