Zpožděné podepisování sestavení

Organizace může mít přísně chráněnou dvojici klíčů, ke kterým vývojáři nemají běžný přístup. Veřejný klíč je často k dispozici, ale přístup k privátnímu klíči je omezen pouze na několik osob. Při vývoji sestavení se silnými názvy, každé sestavení, které odkazuje na sestavení se silným názvem obsahuje token veřejného klíče používaný pro přiřazení silného názvu cílovému sestavení. To vyžaduje, aby byl veřejný klíč k dispozici během procesu vývoje.

Můžete použít zpožděné nebo částečné podepisování kódu v okamžiku sestavení za účelem rezervování prostoru v přenosném spustitelném souboru (PE) pro podpis silného názvu, a odložit podepisování do pozdějšího stádia (obvykle před dodáním sestavení).

Následující kroky popisují proces zpoždění podepisování sestavení:

  1. Získejte veřejný klíč z dvojice klíčů od organizace, která bude provádět případné podepisování. Obvykle je tento klíč ve formě souboru .snk, který lze vytvořit pomocí nástroje Strong Name tool (Sn.exe) poskytovaného Windows Software Development Kit (SDK).

  2. Opatřete zdrojový kód pro sestavení dvěma vlastními atributy pro System.Reflection:

    • AssemblyKeyFileAttribute, který předává název souboru, který obsahuje veřejný klíč, jako parametr jeho konstruktoru.

    • AssemblyDelaySignAttribute, což znamená, že zpožděné podepisování je používáno předáním hodnoty true jako parametru jeho konstruktoru. Příklad:

      <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
      <Assembly:AssemblyDelaySignAttribute(True)>
      
      [assembly:AssemblyKeyFileAttribute("myKey.snk")]
      [assembly:AssemblyDelaySignAttribute(true)]
      
      [assembly:AssemblyKeyFileAttribute("myKey.snk")];
      [assembly:AssemblyDelaySignAttribute(true)];
      
  3. Kompilátor vloží veřejný klíč do manifestu sestavení a vyhradí prostor v souboru PE pro plný podpis silného názvu. Skutečný veřejný klíč musí být uložen při sestavování sestavení, proto aby ostatní sestavení odkazující na toto sestavení mohly získat klíč pro uložení do svého odkazu sestavení.

  4. Vzhledem k tomu, že sestavení nemá platný podpis silného názvu, musí být vypnuto ověřování tohoto podpisu. Můžete to provést pomocí možnosti –Vr v nástroji Strong Name.

    Následující příklad vypne ověřování pro sestavení nazvané myAssembly.dll.

    sn –Vr myAssembly.dll
    
    Poznámka k upozorněníUpozornění

    Použijte možnost -Vr pouze během vývoje.Přidání sestavení na seznam pro přeskočení ověření vytvoří ohrožení zabezpečení.Škodlivé sestavení by mohlo použít plně zadaný název sestavení (název sestavení, verze, jazyková verze a token veřejného klíče), které je přidáno do seznamu pro přeskočení ověření k falšování identity.To by také umožnilo škodlivému sestavení přeskočit ověření.

    PoznámkaPoznámka

    Pokud použijete zpoždění během vývoje s Visual Studio v počítači s 64bitovou podepisování a kompilace sestavení pro Libovolného procesoru, budete muset použít -Vr možnost dvakrát.(V aplikaci Visual Studio Libovolného procesoru hodnota Cílové platformy vytvořit vlastnost; při kompilaci z příkazového řádku, je výchozí nastavení.) Spuštění aplikace z příkazového řádku nebo z Průzkumníka Windows, pomocí 64bitové verze Sn.exe (Strong Name Tool) použít -Vr možnost sestavení.Načíst sestavení do Visual Studio v době návrhu (například sestavení obsahuje komponenty, které jsou používány jinými sestavení v aplikaci), pomocí 32bitové verze nástroje silného názvu.Důvodem je kompilátor just-in-time (JIT) zkompiluje sestavení 64bitové nativní kód při spuštění z příkazového řádku sestavení a 32bitový nativní kód při sestavení je načten do návrhu prostředí.

  5. Později, obvykle těsně před dodávkou sestavení, odešlete sestavení podepisovací autoritě ve vaší společnosti pro aktuální podepsání silného názvu pomocí možnosti –R v nástroji Strong Name.

    Následující příklad podepíše sestavení nazvané myAssembly.dll se silným názvem pomocí dvojice klíčů sgKey.snk.

    sn -R myAssembly.dll sgKey.snk
    

Viz také

Úkoly

Postupy: Vytvořit pár veřejného a soukromého klíče

Odkaz

Sn.exe (Strong Name Tool)

Koncepty

Vytváření sestavení

Další zdroje

Programování se sestaveními