Share via


C#-compileropties voor beveiliging

Met de volgende opties kunt u beveiligingsopties voor compileren beheren. De nieuwe MSBuild-syntaxis wordt vet weergegeven. De oudere csc.exe syntaxis wordt weergegeven in code style.

  • PublicSign / -publicsign: de assembly openbaar ondertekenen.
  • DelaySign / -delaysign: teken de assembly met alleen het openbare gedeelte van de sterke naamsleutel.
  • KeyFile / -keyfile : Geef een sterk naamsleutelbestand op.
  • KeyContainer / -keycontainer: Geef een container met een sterke naamsleutel op.
  • HighEntropyVA / -highentropyva: High-entropy Address Space Layout Randomization (ASLR) inschakelen

Notitie

Raadpleeg compileropties voor meer informatie over het configureren van deze opties voor uw project.

PublicSign

Deze optie zorgt ervoor dat de compiler een openbare sleutel toepast, maar de assembly niet daadwerkelijk ondertekent. Met de optie PublicSign wordt ook een beetje ingesteld in de assembly waarmee de runtime wordt aangegeven dat het bestand is ondertekend.

<PublicSign>true</PublicSign>

Voor de optie PublicSign is het gebruik van de optie KeyFile of KeyContainer vereist. De opties KeyFile en KeyContainer geven de openbare sleutel op. De opties PublicSign en DelaySign sluiten elkaar wederzijds uit. Openbare ondertekening wordt ook wel 'nepteken' of 'OSS-teken' genoemd, en bevat de openbare sleutel in een uitvoerassembly en stelt de vlag ondertekend in. Openbare ondertekening ondertekent de assembly niet daadwerkelijk met een persoonlijke sleutel. Ontwikkelaars gebruiken openbaar teken voor opensource-projecten. Personen bouwen assembly's die compatibel zijn met de uitgebrachte volledig ondertekende assembly's wanneer ze geen toegang hebben tot de persoonlijke sleutel die wordt gebruikt om de assembly's te ondertekenen. Aangezien weinig consumenten daadwerkelijk moeten controleren of de assembly volledig is ondertekend, kunnen deze openbaar gebouwde assembly's worden gebruikt in vrijwel elk scenario waarin de volledig ondertekende assembly zou worden gebruikt.

DelaySign

Deze optie zorgt ervoor dat de compiler ruimte in het uitvoerbestand reserveert, zodat een digitale handtekening later kan worden toegevoegd.

<DelaySign>true</DelaySign>

Gebruik DelaySign als u een volledig ondertekende assembly wilt. Gebruik DelaySign als u alleen de openbare sleutel in de assembly wilt plaatsen. De optie DelaySign heeft geen effect, tenzij deze wordt gebruikt met KeyFile of KeyContainer. De opties KeyContainer en PublicSign sluiten elkaar wederzijds uit. Wanneer u een volledig ondertekende assembly aanvraagt, hashes de compiler het bestand dat het manifest (assemblymetagegevens) bevat en die hash met de persoonlijke sleutel ondertekent. Met deze bewerking wordt een digitale handtekening gemaakt die is opgeslagen in het bestand dat het manifest bevat. Wanneer een assembly is vertraagd, wordt de handtekening niet door de compiler berekend en opgeslagen. In plaats daarvan behoudt de compiler ruimte in het bestand, zodat de handtekening later kan worden toegevoegd.

Met DelaySign kan een tester de assembly in de globale cache plaatsen. Na het testen kunt u de assembly volledig ondertekenen door de persoonlijke sleutel in de assembly te plaatsen met behulp van het hulpprogramma Assembly Linker . Zie Voor meer informatie het maken en gebruiken van sterk benoemde assembly's en het ondertekenen van een assembly vertragen.

KeyFile

Hiermee geeft u de bestandsnaam met de cryptografische sleutel.

<KeyFile>filename</KeyFile>

file is de naam van het bestand met de sterke naamsleutel. Wanneer deze optie wordt gebruikt, voegt de compiler de openbare sleutel uit het opgegeven bestand in het assemblymanifest in en ondertekent de uiteindelijke assembly met de persoonlijke sleutel. Als u een sleutelbestand wilt genereren, typt sn -k file u op de opdrachtregel. Als u compileert met -target:module, wordt de naam van het sleutelbestand bewaard in de module en opgenomen in de assembly die is gemaakt wanneer u een assembly compileert met AddModules. U kunt uw versleutelingsgegevens ook doorgeven aan de compiler met KeyContainer. Gebruik DelaySign als u een gedeeltelijk ondertekende assembly wilt. Als zowel KeyFile als KeyContainer zijn opgegeven in dezelfde compilatie, probeert de compiler eerst de sleutelcontainer. Als dat lukt, wordt de assembly ondertekend met de informatie in de sleutelcontainer. Als de sleutelcontainer niet wordt gevonden door de compiler, wordt het bestand geprobeerd dat is opgegeven met KeyFile. Als dat lukt, wordt de assembly ondertekend met de informatie in het sleutelbestand en worden de sleutelgegevens geïnstalleerd in de sleutelcontainer. Op de volgende compilatie is de sleutelcontainer geldig. Een sleutelbestand kan alleen de openbare sleutel bevatten. Zie Voor meer informatie het maken en gebruiken van sterk benoemde assembly's en het ondertekenen van een assembly vertragen.

KeyContainer

Hiermee geeft u de naam van de cryptografische sleutelcontainer.

<KeyContainer>container</KeyContainer>

container is de naam van de sleutelcontainer met de sterke naam. Wanneer de optie KeyContainer wordt gebruikt, maakt de compiler een deelbaar onderdeel. De compiler voegt een openbare sleutel uit de opgegeven container in het assemblymanifest in en ondertekent de uiteindelijke assembly met de persoonlijke sleutel. Als u een sleutelbestand wilt genereren, typt sn -k file u op de opdrachtregel. sn -i installeert het sleutelpaar in een container. Deze optie wordt niet ondersteund wanneer de compiler wordt uitgevoerd op CoreCLR. Als u een assembly wilt ondertekenen bij het bouwen op CoreCLR, gebruikt u de optie KeyFile . Als u compileert met TargetType, wordt de naam van het sleutelbestand in de module bewaard en opgenomen in de assembly wanneer u deze module compileert in een assembly met AddModules. U kunt deze optie ook opgeven als een aangepast kenmerk (System.Reflection.AssemblyKeyNameAttribute) in de broncode voor elke CIL-module (common intermediate language). U kunt uw versleutelingsgegevens ook doorgeven aan de compiler met KeyFile. Gebruik DelaySign om de openbare sleutel toe te voegen aan het assemblymanifest, maar de assembly te ondertekenen totdat deze is getest. Zie Voor meer informatie het maken en gebruiken van sterk benoemde assembly's en het ondertekenen van een assembly vertragen.

HighEntropyVA

De optie HighEntropyVA-compiler vertelt de Windows-kernel of een bepaald uitvoerbaar bestand ondersteuning biedt voor randomisatie van high entropy Address Space Layout (ASLR).

<HighEntropyVA>true</HighEntropyVA>

Met deze optie geeft u op dat een 64-bits uitvoerbaar bestand of een uitvoerbaar bestand dat is gemarkeerd door de platformtarget-compileroptie een hoge entropy virtuele adresruimte ondersteunt. De optie is standaard ingeschakeld voor alle versies van .NET Standard en .NET Core en .NET Framework vanaf .NET Framework 4.5.

Met de optie HighEntropyVA kunnen compatibele versies van de Windows-kernel hogere mate van entropie gebruiken bij het randomiseren van de adresruimteindeling van een proces als onderdeel van ASLR. Als u een hogere mate van entropie gebruikt, kan een groter aantal adressen worden toegewezen aan geheugenregio's, zoals stacks en heaps. Als gevolg hiervan is het moeilijker om de locatie van een bepaalde geheugenregio te raden. De optie HighEntropyVA-compiler vereist het uitvoerbare doelbestand en eventuele modules waarvoor deze afhankelijk zijn, kunnen de aanwijzerwaarden verwerken die groter zijn dan 4 gigabyte (GB) wanneer ze worden uitgevoerd als een 64-bits proces.