Udostępnij przez


Podpisywanie zestawu z opóźnieniem

Organizacja może mieć ściśle chronioną parę kluczy, do których deweloperzy nie mogą codziennie uzyskiwać dostępu. Klucz publiczny jest często dostępny, ale dostęp do klucza prywatnego jest ograniczony tylko do kilku osób. Podczas tworzenia zestawów o silnych nazwach każdy zestaw odwołujący się do zestawu docelowego o silnej nazwie zawiera token klucza publicznego używanego do nadania zestawowi docelowemu silnej nazwy. Wymaga to, aby klucz publiczny był dostępny podczas procesu programowania.

Możesz użyć opóźnionego lub częściowego podpisywania w czasie kompilacji, aby zarezerwować miejsce w przenośnym pliku wykonywalnym (PE) dla podpisu silnej nazwy, ale odroczyć rzeczywiste podpisywanie do pewnego późniejszego etapu, zwykle tuż przed wysyłką zestawu.

Aby podpisać zestaw z opóźnieniem:

  1. Pobierz część klucza publicznego pary kluczy z organizacji, która będzie wykonywać ostateczne podpisywanie. Zazwyczaj ten klucz jest w postaci pliku snk , który można utworzyć przy użyciu narzędzia Strong Name (Sn.exe) dostarczonego przez zestaw Windows SDK.

  2. Dodaj adnotację do kodu źródłowego dla zestawu z dwoma atrybutami niestandardowymi z System.Reflection elementu.

    • AssemblyKeyFileAttribute, który przekazuje nazwę pliku zawierającego klucz publiczny jako parametr do jego konstruktora.

    • AssemblyDelaySignAttribute, który wskazuje, że opóźnione podpisywanie jest używane przez przekazanie wartości true jako parametru do konstruktora.

    Przykład:

    [assembly:AssemblyKeyFileAttribute("myKey.snk")];
    [assembly:AssemblyDelaySignAttribute(true)];
    
    [assembly:AssemblyKeyFileAttribute("myKey.snk")]
    [assembly:AssemblyDelaySignAttribute(true)]
    
    <Assembly:AssemblyKeyFileAttribute("myKey.snk")>
    <Assembly:AssemblyDelaySignAttribute(True)>
    
  3. Kompilator wstawia klucz publiczny do manifestu zestawu i rezerwuje miejsce w pliku PE na pełny podpis silnej nazwy. Rzeczywisty klucz publiczny musi być przechowywany podczas kompilowania zestawu, aby inne zestawy odwołujące się do tego zestawu mogły uzyskać klucz do przechowywania we własnym odwołaniu do zestawu.

  4. Ponieważ zestaw nie ma prawidłowego podpisu silnej nazwy, należy wyłączyć weryfikację tego podpisu. Można to zrobić za pomocą opcji -Vr z narzędziem Strong Name.

    Poniższy przykład wyłącza weryfikację zestawu o nazwie myAssembly.dll.

    sn -Vr myAssembly.dll
    

    Aby wyłączyć weryfikację na platformach, na których nie można uruchomić narzędzia strong name, takiego jak mikroprocesory Advanced RISC Machine (ARM), użyj opcji -Vk , aby utworzyć plik rejestru. Zaimportuj plik rejestru do rejestru na komputerze, na którym chcesz wyłączyć weryfikację. Poniższy przykład tworzy plik rejestru dla programu myAssembly.dll.

    sn -Vk myRegFile.reg myAssembly.dll
    

    Za pomocą opcji -Vr lub -Vk można opcjonalnie dołączyć plik snk do podpisywania klucza testowego.

    Ostrzeżenie

    Nie należy polegać na silnych nazwach jako środku bezpieczeństwa. Zapewniają one tylko unikatową tożsamość.

    Uwaga / Notatka

    Jeśli używasz opóźnionego podpisywania podczas programowania w programie Visual Studio na komputerze 64-bitowym i kompilujesz zestaw z konfiguracją Any CPU, może być konieczne dwukrotne zastosowanie opcji -Vr. (W programie Visual Studio dowolny procesor jest wartością właściwości kompilacji Target platformy; podczas kompilowania z wiersza polecenia jest to wartość domyślna). Aby uruchomić aplikację z poziomu wiersza polecenia lub Eksploratora plików, użyj 64-bitowej wersji narzędziaSn.exe (narzędzie silnej nazwy), aby zastosować opcję -Vr do modułu. Aby załadować zestaw do programu Visual Studio w czasie projektowania (na przykład jeśli zestaw zawiera składniki używane przez inne zestawy w aplikacji), użyj 32-bitowej wersji narzędzia o silnej nazwie. Jest to spowodowane tym, że kompilator just-in-time (JIT) kompiluje kod zestawu do 64-bitowego kodu natywnego, gdy zestaw jest uruchamiany z wiersza polecenia, oraz do 32-bitowego kodu natywnego, gdy zestaw jest ładowany do środowiska projektowego.

  5. Później, zwykle tuż przed wysyłką, zazwyczaj przesyłasz zestaw do upoważnionej osoby podpisującej w organizacji w celu rzeczywistego podpisania silną nazwą przy użyciu opcji -R narzędzia Strong Name.

    Poniższy przykład podpisuje zestaw o nazwie myAssembly.dll z silną nazwą przy użyciu pary kluczy sgKey.snk .

    sn -R myAssembly.dll sgKey.snk
    

Zobacz także