Condividi tramite


Ritardo della firma di un assembly

Aggiornamento: novembre 2007

È possibile che in un'organizzazione venga utilizzata una coppia di chiavi sottoposta a una rigorosa sicurezza e quindi non accessibile giornalmente agli sviluppatori. La chiave pubblica è spesso disponibile, ma l'accesso alla chiave privata è consentito solo ad alcune persone. Quando si sviluppano assembly con nome sicuro, in ogni assembly che fa riferimento all'assembly con nome sicuro di destinazione è contenuto un token della chiave pubblica utilizzata per assegnare un nome sicuro all'assembly di destinazione. È quindi necessario che la chiave pubblica risulti disponibile durante il processo di sviluppo.

È possibile utilizzare la firma ritardata o parziale in fase di creazione per riservare nel file eseguibile trasportabile (PE, Portable Executable) lo spazio per la firma con nome sicuro, ma posticipare la firma effettiva a una fase successiva (solitamente prima della consegna dell'assembly).

Nei passaggi successivi viene descritto il processo che consente di ritardare la firma di un assembly.

  1. Ottenere la parte pubblica della coppia di chiavi dall'organizzazione da cui verrà effettivamente apposta la firma. Tale chiave si presenta solitamente sotto forma di file con estensione snk. È possibile creare questo file mediante lo strumento Nome sicuro (Sn.exe), disponibile in Windows Software Development Kit (SDK).

  2. Apporre annotazioni al codice sorgente per l'assembly utilizzando due attributi personalizzati da System.Reflection:

    • AssemblyKeyFileAttribute, che consente di passare il nome del file contenente la chiave pubblica come parametro al costruttore.

    • AssemblyDelaySignAttribute, che indica che si sta utilizzando il ritardo della firma passando true come parametro al costruttore. Ad esempio:

          <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
          <Assembly:AssemblyDelaySignAttribute(true)>
      
          [assembly:AssemblyKeyFileAttribute("myKey.snk")]
          [assembly:AssemblyDelaySignAttribute(true)]
      
  3. La chiave pubblica viene inserita dal compilatore nel manifesto dell'assembly e nel file PE viene riservato spazio per la firma completa con nome sicuro. È necessario che la vera chiave pubblica sia memorizzata in fase di creazione, in modo che gli altri assembly contenenti riferimenti a questo assembly siano in grado di ottenere la chiave da memorizzare nei relativi riferimenti di assembly.

  4. Poiché l'assembly non dispone di una firma con nome sicuro valida, è necessario disattivare la verifica di tale assembly. Per effettuare questa operazione, è possibile utilizzare l'opzione –Vr con lo strumento Nome sicuro.

    L'esempio seguente consente di disattivare la verifica per un assembly denominato myAssembly.dll.

    sn –Vr myAssembly.dll
    
    Attenzione:

    Utilizzare l'opzione -Vr solo in fase di sviluppo. L'aggiunta di un assembly all'elenco di omissione della verifica rende vulnerabile il sistema di sicurezza. Un assembly dannoso potrebbe utilizzare il nome completamente specificato (nome assembly, versione, impostazioni cultura e token della chiave pubblica) dell'assembly aggiunto all'elenco di omissione della verifica per camuffare la propria identità. La verifica verrebbe omessa quindi anche per l'assembly dannoso.

  5. Successivamente, di solito prima della consegna, sottoporre l'assembly all'autorità di firma dell'organizzazione per la firma con nome sicuro effettiva tramite l'opzione –R con lo strumento Nome sicuro.

    L'esempio seguente consente di firmare un assembly denominato myAssembly.dll con un nome sicuro utilizzando la coppia di chiavi sgKey.snk.

    sn -R myAssembly.dll sgKey.snk
    

Vedere anche

Attività

Procedura: creare una coppia di chiavi pubblica/privata

Concetti

Creazione degli assembly

Riferimenti

Strumento Nome sicuro (Sn.exe)

Altre risorse

Programmazione con gli assembly