Partilhar via


Atrasar a assinatura de uma montagem

Uma organização pode ter um par de chaves bem guardado que os desenvolvedores não podem acessar diariamente. A chave pública está frequentemente disponível, mas o acesso à chave privada é restrito a apenas alguns indivíduos. Ao desenvolver assemblies com nomes fortes, cada assembly que faz referência ao assembly de destino com nome forte contém o token da chave pública usada para dar ao assembly de destino um nome forte. Para tal, é necessário que a chave pública esteja disponível durante o processo de desenvolvimento.

Você pode usar a assinatura atrasada ou parcial no momento da compilação para reservar espaço no arquivo executável portátil (PE) para a assinatura de nome forte, mas adiar a assinatura real para algum estágio posterior, geralmente pouco antes de distribuir a assemblagem.

Para atrasar a assinatura de uma montagem:

  1. Obtenha a parte de chave pública do par de chaves da organização que realizará a assinatura final. Normalmente, essa chave está na forma de um arquivo .snk , que pode ser criado usando a ferramenta Nome forte (Sn.exe) fornecida pelo SDK do Windows.

  2. Anote o código-fonte do 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 em atraso está a ser utilizada ao passar true como parâmetro para o seu 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 de nome forte completo. A chave pública real deve ser armazenada durante a construção da assemblagem, permitindo que outras assemblagens que a referenciam possam obter a chave para armazenar na sua própria referência de assemblagem.

  4. Como o conjunto não tem uma assinatura de nome forte válida, a verificação dessa assinatura deve ser desligada. Você pode fazer isso usando a opção -Vr com a ferramenta Nome forte.

    O exemplo a seguir desativa a verificação para um assembly chamado myAssembly.dll.

    sn -Vr myAssembly.dll
    

    Para desativar a verificação em plataformas onde não é possível executar a ferramenta Strong Name, como microprocessadores Advanced RISC Machine (ARM), use a opção -Vk para criar um ficheiro de registo. Importe o ficheiro de registo para o sistema do computador onde pretende desativar a verificação. O exemplo a seguir cria um arquivo do Registro para myAssembly.dll.

    sn -Vk myRegFile.reg myAssembly.dll
    

    Com a opção -Vr ou -Vk , você pode, opcionalmente, incluir um arquivo .snk para assinatura de chave de teste.

    Advertência

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

    Observação

    Se utilizar o adiamento de assinatura durante o desenvolvimento com o Visual Studio em um computador de 64 bits e compilar um assembly para Any CPU, talvez seja necessário aplicar a opção -Vr duas vezes. (No Visual Studio, Qualquer processador é um valor da propriedade de build Platform Target, quando compilas a partir da linha de comando, é o padrão.) Para executar tua aplicação a partir da linha de comando ou do Explorador de Arquivos, usa a versão de 64 bits da Sn.exe (Strong Name tool) para aplicar a opção -Vr ao assembly. Para carregar o assembly no Visual Studio em tempo de desenvolvimento (por exemplo, se o assembly contiver componentes que são usados por outros assemblies na sua aplicação), use a versão de 32 bits da ferramenta de 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 assembly é carregado no ambiente de tempo de design.

  5. Mais tarde, geralmente pouco antes do envio, você envia o assembly para a autoridade de assinatura da sua organização para a assinatura de nome forte real usando a opção -R com a ferramenta Nome forte.

    O exemplo a seguir assina um assembly chamado myAssembly.dll com um nome forte usando o par de chaves sgKey.snk .

    sn -R myAssembly.dll sgKey.snk
    

Ver também