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 názvu, ale odložit skutečné podepisování až do určité pozdější fáze, obvykle těsně před odesláním sestavení.

Odložení podepsání sestavení:

  1. Získejte část veřejného klíče páru klíčů z organizace, která provede případné podepisování. Tento klíč je obvykle ve formě souboru .snk , který lze vytvořit pomocí nástroje silného názvu (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.

    • AssemblyDelaySignAttributeoznačuje, že podepisování zpoždění se používá předáním hodnoty true jako parametr 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 zarezervuje místo v souboru PE pro úplný podpis silného názvu. Skutečný veřejný klíč musí být uložen, zatímco sestavení je sestaveno tak, aby ostatní sestavení, která odkazují na toto sestavení, mohli 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ázvem myAssembly.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íčů.

    Upozorňující

    Nespoléhejte na silné názvy 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, Jakýkoli procesor je hodnota 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ík souborů, použijte 64bitovou verzi nástroje Sn.exe (Strong Name) k použití možnosti -Vr na sestavení. 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 pro skutečné podepisování silných jmen pomocí parametru -R s nástrojem 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é