Sdílet prostřednictvím


Opožděný podpis sestavení

Organizace může mít úzce strážený pár klíčů, ke kterému vývojáři nemají přístup každý den. Veřejný klíč je často dostupný, ale přístup k privátnímu klíči je omezený jenom na několik jednotlivců. Při vývoji sestavení se silnými názvy obsahuje každé sestavení, které odkazuje na sestavení cíle se silným názvem, token veřejného klíče, který se používá k zadání silného názvu cílového sestavení. To vyžaduje, aby byl veřejný klíč během procesu vývoje dostupný.

Zpožděné nebo částečné podepisování v době sestavení můžete použít k rezervaci místa v přenosném spustitelném souboru (PE) pro podpis silného jména, ale odložit skutečné podepisování až do určité pozdější fáze, obvykle těsně před uvedením sestavení na trh.

Odložení podepsání sestavení:

  1. Získejte veřejnou část páru klíčů z organizace, která provede konečné podepisování. Tento klíč je obvykle ve formě souboru .snk , který lze vytvořit pomocí nástroje Strong Name (Sn.exe) poskytovaného sadou Windows SDK.

  2. Přidání poznámek ke zdrojovému kódu sestavení se dvěma vlastními atributy z System.Reflection:

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

    • AssemblyDelaySignAttribute označuje, že zpožděné podepisování se používá předáním true jako parametru jeho konstruktoru.

    Napří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 zarezervuje místo v souboru PE pro kompletní podpis strong name. Skutečný veřejný klíč musí být uložen během vytváření sestavení, aby ostatní sestavení odkazující na toto sestavení mohla získat klíč pro uložení ve vlastním odkazu na sestavení.

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

    Následující příklad vypne ověření sestavení s názvemmyAssembly.dll.

    sn -Vr myAssembly.dll
    

    Pokud chcete vypnout ověřování na platformách, kde nemůžete spustit nástroj Strong Name, jako jsou mikroprocesory ARM (Advanced RISC Machine), použijte možnost -Vk k vytvoření souboru registru. Naimportujte soubor registru do registru v počítači, kde chcete vypnout ověření. Následující příklad vytvoří soubor registru pro myAssembly.dll.

    sn -Vk myRegFile.reg myAssembly.dll
    

    Pomocí možnosti -Vr nebo -Vk můžete volitelně zahrnout soubor .snk pro podepisování testovacích klíčů.

    Výstraha

    Nespoléhejte na strong names pro zabezpečení. Poskytují pouze jedinečnou identitu.

    Poznámka:

    Pokud při vývoji v 64bitovém počítači používáte odložené podepisování pomocí sady Visual Studio a kompilujete sestavení pro libovolný procesor, možná budete muset použít možnost -Vr dvakrát. (V sadě Visual Studio je libovolný procesor hodnotou vlastnosti sestavení Cíl platformy ; při kompilaci z příkazového řádku je výchozí.) Pokud chcete aplikaci spustit z příkazového řádku nebo z Průzkumníka souborů, použijte 64bitovou verzi nástrojeSn.exe (Strong Name) a použijte u sestavení možnost -Vr . Pokud chcete načíst sestavení do sady Visual Studio v době návrhu (například pokud sestavení obsahuje součásti používané jinými sestaveními v aplikaci), použijte 32bitovou verzi nástroje strong-name. Důvodem je to, že kompilátor JIT (just-in-time) kompiluje sestavení do 64bitového nativního kódu při spuštění sestavení z příkazového řádku a do 32bitového nativního kódu při načtení sestavení do prostředí návrhu.

  5. Později, obvykle těsně před odesláním, odešlete sestavení podpisové autoritě vaší organizace k provedení skutečného podepisování silného jména s použitím parametru -R nástroje Strong Name.

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

    sn -R myAssembly.dll sgKey.snk
    

Viz také