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 opóźnić podpisywanie zestawu:

  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 zestawu z dwoma atrybutami niestandardowymi z System.Reflectionelementu :

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

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

    Na 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 w celu uzyskania pełnego podpisu 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 zabezpieczeń. Zapewniają one tylko unikatową tożsamość.

    Uwaga

    Jeśli używasz podpisywania opóźnień podczas programowania w programie Visual Studio na komputerze 64-bitowym i skompilujesz zestaw dla dowolnego procesora CPU, może być konieczne dwukrotne zastosowanie opcji -Vr . (W programie Visual Studio, Każdy procesor CPU 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 z Eksplorator plików, użyj 64-bitowej wersji narzędzia Sn.exe (silnej nazwy), aby zastosować opcję -Vr do zestawu. 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 zestaw do 64-bitowego kodu natywnego, gdy zestaw jest uruchamiany z wiersza polecenia, oraz do 32-bitowego kodu natywnego, gdy zestaw jest ładowany do środowiska czasu projektowania.

  5. Później, zwykle tuż przed wysyłką, należy przesłać zestaw do urzędu podpisywania organizacji w celu rzeczywistego podpisywania silnej nazwy przy użyciu opcji -R z narzędziem 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 też