Dela via


Skapa och använda starka namngivna sammansättningar

Ett starkt namn består av sammansättningens identitet – dess enkla textnamn, versionsnummer och kulturinformation (om det tillhandahålls)– plus en offentlig nyckel och en digital signatur. Den genereras från en sammansättningsfil med hjälp av motsvarande privata nyckel. (Sammansättningsfilen innehåller sammansättningsmanifestet, som innehåller namn och hashvärden för alla filer som utgör sammansättningen.)

Varning

Förlita dig inte på starka namn för säkerhet. De ger endast en unik identitet.

En stark namngiven sammansättning kan bara använda typer från andra starka namngivna sammansättningar. Annars skulle integriteten för den starkt namngivna sammansättningen äventyras.

Kommentar

Även om .NET Core stöder starkt namngivna sammansättningar och alla sammansättningar i .NET Core-biblioteket är signerade, behöver majoriteten av tredjepartssammansättningar inte starka namn. Mer information finns i Strong Name Signing på GitHub.

Scenario med starkt namn

I följande scenario beskrivs processen att signera en sammansättning med ett starkt namn och senare referera till den med det namnet.

  1. Sammansättning A skapas med ett starkt namn med någon av följande metoder:

    • Använda en utvecklingsmiljö som har stöd för att skapa starka namn, till exempel Visual Studio.

    • Skapa ett kryptografiskt nyckelpar med verktyget Starkt namn (Sn.exe) och tilldela nyckelparet till sammansättningen med hjälp av antingen en kommandoradskompilator eller Assembly Linker (Al.exe). Windows SDK tillhandahåller både Sn.exe och Al.exe.

  2. Utvecklingsmiljön eller verktyget signerar hashen för filen som innehåller sammansättningens manifest med utvecklarens privata nyckel. Den här digitala signaturen lagras i den bärbara körbara filen (PE) som innehåller manifestet för sammansättning A.

  3. Sammansättning B är en konsument av sammansättning A. Referensavsnittet i sammansättning B:s manifest innehåller en token som representerar sammansättning A:s offentliga nyckel. En token är en del av den fullständiga offentliga nyckeln och används i stället för själva nyckeln för att spara utrymme.

  4. Den vanliga språkkörningen verifierar den starka namnsignaturen när sammansättningen placeras i den globala sammansättningscachen. Vid bindning med starkt namn vid körning jämför den vanliga språkkörningen nyckeln som lagras i manifestet för sammansättning B med nyckeln som används för att generera det starka namnet för sammansättning A. Om .NET-säkerhetskontrollerna passerar och bindningen lyckas har sammansättning B en garanti för att sammansättning A:s bitar inte har manipulerats och att dessa bitar faktiskt kommer från utvecklarna av sammansättning A.

Kommentar

Det här scenariot hanterar inte förtroendeproblem. Sammansättningar kan ha fullständiga Microsoft Authenticode-signaturer utöver ett starkt namn. Authenticode-signaturer innehåller ett certifikat som upprättar förtroende. Det är viktigt att observera att starka namn inte kräver att kod signeras på det här sättet. Starka namn ger bara en unik identitet.

Kringgå signaturverifiering av betrodda sammansättningar

Från och med .NET Framework 3.5 Service Pack 1 verifieras inte signaturer med starka namn när en sammansättning läses in i en programdomän med fullständigt förtroende, till exempel standardprogramdomänen MyComputer för zonen. Detta kallas funktionen för att kringgå starka namn. I en miljö med fullständigt förtroende kan kraven på StrongNameIdentityPermission att alltid lyckas för signerade, fullständigt betrodda sammansättningar, oavsett signatur. Funktionen för att kringgå starka namn undviker onödiga omkostnader för verifiering av starka namn-signaturer för fullständiga förtroendesammansättningar i den här situationen, vilket gör att sammansättningarna kan läsas in snabbare.

Funktionen bypass gäller för alla sammansättningar som är signerade med ett starkt namn och som har följande egenskaper:

  • Fullständigt betrodd utan StrongName bevis (till exempel har MyComputer zonbevis).

  • Läses in i en fullständigt betrodd AppDomain.

  • Läses in från en plats under ApplicationBase egenskapen för den AppDomain.

  • Inte fördröjningssignerad.

Den här funktionen kan inaktiveras för enskilda program eller för en dator. Se Så här gör du: Inaktivera funktionen för att kringgå starka namn.

Title Description
Gör så här: Skapa ett offentligt-privat nyckelpar Beskriver hur du skapar ett kryptografiskt nyckelpar för signering av en sammansättning.
Anvisningar: Signera en sammansättning med ett starkt namn Beskriver hur du skapar en stark namngiven sammansättning.
Förbättrad stark namngivning Beskriver förbättringar av starka namn i .NET Framework 4.5.
Gör så här: Referera till en stark namngiven sammansättning Beskriver hur du refererar till typer eller resurser i en stark namngiven sammansättning vid kompileringstid eller körningstid.
Gör så här: Inaktivera funktionen för att kringgå starka namn Beskriver hur du inaktiverar funktionen som kringgår verifieringen av starka namn-signaturer. Den här funktionen kan inaktiveras för alla eller för specifika program.
Skapa sammansättningar Ger en översikt över sammansättningar med en fil och flera filer.
Så här fördröjer du tecknet för en sammansättning i Visual Studio Förklarar hur du signerar en sammansättning med ett starkt namn när sammansättningen har skapats.
Sn.exe (verktyget Starkt namn) Beskriver verktyget som ingår i .NET Framework som hjälper dig att skapa sammansättningar med starka namn. Det här verktyget innehåller alternativ för nyckelhantering, signaturgenerering och signaturverifiering.
Al.exe (sammansättningslänkare) Beskriver verktyget som ingår i .NET Framework som genererar en fil som har ett sammansättningsmanifest från moduler eller resursfiler.