Opcje kompilatora języka C# dla zabezpieczeń
Poniższe opcje kontrolują opcje zabezpieczeń kompilatora. Nowa składnia programu MSBuild jest wyświetlana w obszarze Pogrubienie. Starsza składnia csc.exe jest wyświetlana w pliku code style
.
- PublicSign /
-publicsign
: publicznie podpisz zestaw. - DelaySign /
-delaysign
: opóźnij podpisywanie zestawu przy użyciu tylko publicznej części klucza silnej nazwy. - KeyFile /
-keyfile
: określ plik klucza silnej nazwy. - KeyContainer /
-keycontainer
: określ kontener klucza silnej nazwy. - HighEntropyVA /
-highentropyva
: włącz losowe układy przestrzeni adresowej o wysokiej entropii (ASLR)
Uwaga
Aby uzyskać więcej informacji na temat konfigurowania tych opcji dla projektu, zobacz Opcje kompilatora.
PublicSign
Ta opcja powoduje, że kompilator stosuje klucz publiczny, ale w rzeczywistości nie podpisuje zestawu. Opcja PublicSign ustawia również nieco w zestawie, który informuje środowisko uruchomieniowe, że plik jest podpisany.
<PublicSign>true</PublicSign>
Opcja PublicSign wymaga użycia opcji KeyFile lub KeyContainer. Opcje KeyFile i KeyContainer określają klucz publiczny. Opcje PublicSign i DelaySign wzajemnie się wykluczają. Czasami nazywane "fałszywym znakiem" lub "znakiem systemu operacyjnego", podpisywanie publiczne zawiera klucz publiczny w zestawie wyjściowym i ustawia flagę "podpisany". Podpisywanie publiczne nie podpisuje zestawu przy użyciu klucza prywatnego. Deweloperzy używają podpisywania publicznego dla projektów open source. Osoby tworzą zestawy zgodne z wydanymi zestawami "w pełni podpisanymi", gdy nie mają dostępu do klucza prywatnego używanego do podpisywania zestawów. Ponieważ niewielu konsumentów rzeczywiście musi sprawdzić, czy zestaw jest w pełni podpisany, te publicznie utworzone zestawy są używane w prawie każdym scenariuszu, w którym będzie używany w pełni podpisany.
DelaySign
Ta opcja powoduje, że kompilator zarezerwował miejsce w pliku wyjściowym, aby można było dodać podpis cyfrowy później.
<DelaySign>true</DelaySign>
Użyj funkcji DelaySign — jeśli chcesz w pełni podpisany zestaw. Użyj funkcji DelaySign , jeśli chcesz umieścić klucz publiczny tylko w zestawie. Opcja DelaySign nie ma wpływu, chyba że jest używana z kluczemFile lub KeyContainer. Opcje KeyContainer i PublicSign wzajemnie się wykluczają. Gdy zażądasz w pełni podpisanego zestawu, kompilator skróty pliku zawierającego manifest (metadane zestawu) i znaki skrótu z kluczem prywatnym. Ta operacja tworzy podpis cyfrowy przechowywany w pliku zawierającym manifest. Gdy zestaw jest podpisany z opóźnieniem, kompilator nie oblicza i nie przechowuje podpisu. Zamiast tego kompilator zastrzega sobie miejsce w pliku, aby można było później dodać podpis.
Użycie funkcji DelaySign umożliwia testerowi umieszczenie zestawu w globalnej pamięci podręcznej. Po przetestowaniu można w pełni podpisać zestaw, umieszczając klucz prywatny w zestawie przy użyciu narzędzia Konsolidator zestawów. Aby uzyskać więcej informacji, zobacz Tworzenie i używanie zestawów o silnych nazwach i opóźnianie podpisywania zestawu.
KeyFile
Określa nazwę pliku zawierającą klucz kryptograficzny.
<KeyFile>filename</KeyFile>
file
to nazwa pliku zawierającego silny klucz nazwy. Gdy ta opcja jest używana, kompilator wstawia klucz publiczny z określonego pliku do manifestu zestawu, a następnie podpisuje ostateczny zestaw za pomocą klucza prywatnego. Aby wygenerować plik klucza, wpisz sn -k file
polecenie w wierszu polecenia. Jeśli skompilujesz element -target:module, nazwa pliku klucza będzie przechowywana w module i włączona do zestawu utworzonego podczas kompilowania zestawu za pomocą funkcji AddModules. Możesz również przekazać informacje o szyfrowaniu do kompilatora za pomocą narzędzia KeyContainer. Użyj funkcji DelaySign , jeśli chcesz częściowo podpisany zestaw. W przypadku, gdy zarówno KeyFile , jak i KeyContainer są określone w tej samej kompilacji, kompilator najpierw spróbuje kontener kluczy. Jeśli to się powiedzie, zestaw jest podpisany przy użyciu informacji w kontenerze kluczy. Jeśli kompilator nie znajdzie kontenera kluczy, spróbuje wykonać plik określony w pliku KeyFile. Jeśli to się powiedzie, zestaw zostanie podpisany przy użyciu informacji w pliku klucza, a informacje o kluczu zostaną zainstalowane w kontenerze kluczy. W następnej kompilacji kontener kluczy będzie prawidłowy. Plik klucza może zawierać tylko klucz publiczny. Aby uzyskać więcej informacji, zobacz Tworzenie i używanie zestawów o silnych nazwach i opóźnianie podpisywania zestawu.
KeyContainer
Określa nazwę kontenera kluczy kryptograficznych.
<KeyContainer>container</KeyContainer>
container
to nazwa kontenera klucza silnej nazwy. Gdy jest używana opcja KeyContainer, kompilator tworzy składnik z możliwością udostępniania. Kompilator wstawia klucz publiczny z określonego kontenera do manifestu zestawu i podpisuje ostateczny zestaw za pomocą klucza prywatnego. Aby wygenerować plik klucza, wpisz sn -k file
polecenie w wierszu polecenia. sn -i
instaluje parę kluczy w kontenerze. Ta opcja nie jest obsługiwana, gdy kompilator działa w rdzeniu CoreCLR. Aby podpisać zestaw podczas kompilowania w coreCLR, użyj opcji KeyFile . Jeśli skompilujesz element TargetType, nazwa pliku klucza będzie przechowywana w module i włączona do zestawu podczas kompilowania tego modułu do zestawu za pomocą funkcji AddModules. Tę opcję można również określić jako atrybut niestandardowy (System.Reflection.AssemblyKeyNameAttribute) w kodzie źródłowym dla dowolnego modułu wspólnego języka pośredniego (CIL). Możesz również przekazać informacje o szyfrowaniu do kompilatora za pomocą pliku KeyFile. Użyj funkcji DelaySign , aby dodać klucz publiczny do manifestu zestawu, ale podpisywanie zestawu do momentu jego przetestowania. Aby uzyskać więcej informacji, zobacz Tworzenie i używanie zestawów o silnych nazwach i opóźnianie podpisywania zestawu.
HighEntropyVA
Opcja kompilatora HighEntropyVA informuje jądro systemu Windows, czy określony plik wykonywalny obsługuje losowe układy przestrzeni adresowej o wysokiej entropii (ASLR).
<HighEntropyVA>true</HighEntropyVA>
Ta opcja określa, że 64-bitowy plik wykonywalny lub plik wykonywalny oznaczony opcją kompilatora PlatformTarget obsługuje przestrzeń adresową wirtualną o wysokiej entropii. Opcja jest domyślnie włączona dla wszystkich wersji .NET Standard i .NET Core oraz .NET Framework, począwszy od programu .NET Framework 4.5.
Opcja HighEntropyVA umożliwia zgodne wersje jądra systemu Windows do korzystania z wyższych stopni entropii podczas losowania układu przestrzeni adresowej procesu w ramach ASLR. Użycie wyższych stopni entropii oznacza, że można przydzielić większą liczbę adresów do regionów pamięci, takich jak stosy i stertki. W związku z tym trudniej jest odgadnąć lokalizację określonego regionu pamięci. Opcja kompilatora HighEntropyVA wymaga docelowego pliku wykonywalnego i wszystkich modułów, od których zależy, może obsługiwać wartości wskaźnika większe niż 4 gigabajty (GB), gdy są uruchomione jako proces 64-bitowy.