C#-kompilatoralternativ för säkerhet

Följande alternativ styr säkerhetsalternativen för kompilatorn. Den nya MSBuild-syntaxen visas i Fetstil. Den äldre csc.exe syntaxen visas i code style.

  • PublicSign / -publicsign: Signera sammansättningen offentligt.
  • DelaySign / -delaysign: Fördröj signera sammansättningen med endast den offentliga delen av den starka namnnyckeln.
  • KeyFile / -keyfile : Ange en stark namnnyckelfil.
  • KeyContainer / -keycontainer: Ange en container med stark namnnyckel.
  • HighEntropyVA / -highentropyva: Aktivera randomisering av hög entropiadressutrymmeslayout (ASLR)

PublicSign

Det här alternativet gör att kompilatorn tillämpar en offentlig nyckel men signerar inte sammansättningen. Alternativet PublicSign anger också en bit i sammansättningen som talar om för körningen att filen är signerad.

<PublicSign>true</PublicSign>

Alternativet PublicSign kräver att alternativet KeyFile eller KeyContainer används. Alternativen KeyFile och KeyContainer anger den offentliga nyckeln. Alternativen PublicSign och DelaySign är ömsesidigt uteslutande. Offentlig signering kallas ibland "falska tecken" eller "OSS-tecken" och innehåller den offentliga nyckeln i en utdatasammansättning och anger flaggan "signerad". Offentlig signering signerar faktiskt inte sammansättningen med en privat nyckel. Utvecklare använder offentliga tecken för projekt med öppen källkod. Personer kompileringssammansättningar som är kompatibla med de utgivna "fullständigt signerade" sammansättningarna när de inte har åtkomst till den privata nyckel som används för att signera sammansättningarna. Eftersom få konsumenter faktiskt behöver kontrollera om sammansättningen är fullständigt signerad kan dessa offentligt byggda sammansättningar användas i nästan alla scenarion där den fullständigt signerade skulle användas.

DelaySign

Det här alternativet gör att kompilatorn reserverar utrymme i utdatafilen så att en digital signatur kan läggas till senare.

<DelaySign>true</DelaySign>

Använd DelaySign – om du vill ha en fullständigt signerad sammansättning. Använd DelaySign om du bara vill placera den offentliga nyckeln i sammansättningen. Alternativet DelaySign har ingen effekt om det inte används med KeyFile eller KeyContainer. Alternativen KeyContainer och PublicSign är ömsesidigt uteslutande. När du begär en fullständigt signerad sammansättning hashar kompilatorn filen som innehåller manifestet (sammansättningsmetadata) och tecken som hash med den privata nyckeln. Den åtgärden skapar en digital signatur som lagras i filen som innehåller manifestet. När en sammansättningen är fördröjd signerad beräknar och lagrar kompilatorn inte signaturen. Kompilatorn reserverar i stället utrymme i filen så att signaturen kan läggas till senare.

Med Hjälp av DelaySign kan en testare placera sammansättningen i den globala cachen. Efter testningen kan du signera sammansättningen helt genom att placera den privata nyckeln i sammansättningen med verktyget Assembly Linker . Mer information finns i Skapa och använda starka namngivna sammansättningar och Fördröj signering av en sammansättning.

Nyckelfil

Anger filnamnet som innehåller den kryptografiska nyckeln.

<KeyFile>filename</KeyFile>

file är namnet på filen som innehåller den starka namnnyckeln. När det här alternativet används infogar kompilatorn den offentliga nyckeln från den angivna filen i sammansättningsmanifestet och signerar sedan den slutliga sammansättningen med den privata nyckeln. Om du vill generera en nyckelfil skriver du sn -k file på kommandoraden. Om du kompilerar med -target:module lagras namnet på nyckelfilen i modulen och införlivas i sammansättningen som skapades när du kompilerade en sammansättning med AddModules. Du kan också skicka krypteringsinformationen till kompilatorn med KeyContainer. Använd DelaySign om du vill ha en delvis signerad sammansättning. Om både KeyFile och KeyContainer anges i samma kompilering provar kompilatorn först nyckelcontainern. Om det lyckas signeras sammansättningen med informationen i nyckelcontainern. Om kompilatorn inte hittar nyckelcontainern provar den fil som angetts med KeyFile. Om det lyckas signeras sammansättningen med informationen i nyckelfilen och nyckelinformationen installeras i nyckelcontainern. Vid nästa kompilering är nyckelcontainern giltig. En nyckelfil kan bara innehålla den offentliga nyckeln. Mer information finns i Skapa och använda starka namngivna sammansättningar och Fördröj signering av en sammansättning.

Nyckelbehållare

Anger namnet på containern för kryptografisk nyckel.

<KeyContainer>container</KeyContainer>

container är namnet på den starka namnnyckelcontainern. När alternativet KeyContainer används skapar kompilatorn en delbar komponent. Kompilatorn infogar en offentlig nyckel från den angivna containern i sammansättningsmanifestet och signerar den slutliga sammansättningen med den privata nyckeln. Om du vill generera en nyckelfil skriver du sn -k file på kommandoraden. sn -i installerar nyckelparet i en container. Det här alternativet stöds inte när kompilatorn körs på CoreCLR. Om du vill signera en sammansättning när du bygger på CoreCLR använder du alternativet KeyFile. Om du kompilerar med TargetType lagras namnet på nyckelfilen i modulen och införlivas i sammansättningen när du kompilerar den här modulen i en sammansättning med AddModules. Du kan också ange det här alternativet som ett anpassat attribut (System.Reflection.AssemblyKeyNameAttribute) i källkoden för valfri CIL-modul (Common Intermediate Language). Du kan också skicka krypteringsinformationen till kompilatorn med KeyFile. Använd DelaySign för att lägga till den offentliga nyckeln i sammansättningsmanifestet men signera sammansättningen tills den har testats. Mer information finns i Skapa och använda starka namngivna sammansättningar och Fördröj signering av en sammansättning.

HighEntropyVA

Kompilatoralternativet HighEntropyVA talar om för Windows-kerneln om en viss körbar fil stöder randomisering av hög entropiadressutrymmeslayout (ASLR).

<HighEntropyVA>true</HighEntropyVA>

Det här alternativet anger att en 64-bitars körbar fil eller en körbar fil som markeras med kompileringsalternativet PlatformTarget stöder ett högt virtuellt adressutrymme för entropi. Alternativet är aktiverat som standard för alla .NET Standard- och .NET Core-versioner och .NET Framework-versioner som börjar med .NET Framework 4.5.

Med alternativet HighEntropyVA kan kompatibla versioner av Windows-kerneln använda högre entropigrader när du randomiserar adressutrymmeslayouten för en process som en del av ASLR. Om du använder högre entropigrader kan ett större antal adresser allokeras till minnesregioner som t.ex. staplar och heaps. Därför är det svårare att gissa platsen för en viss minnesregion. Alternativet HighEntropyVA-kompilator kräver det körbara målet och alla moduler som det är beroende av kan hantera pekarvärden som är större än 4 gigabyte (GB) när de körs som en 64-bitarsprocess.