Delen via


Sterk benoemde assembly's maken en gebruiken

Een sterke naam bestaat uit de identiteit van de assembly, de eenvoudige tekstnaam, het versienummer en cultuurinformatie (indien opgegeven) plus een openbare sleutel en een digitale handtekening. Deze wordt gegenereerd op basis van een assemblybestand met behulp van de bijbehorende persoonlijke sleutel. (Het assemblybestand bevat het assemblymanifest, dat de namen en hashes bevat van alle bestanden waaruit de assembly bestaat.)

Waarschuwing

Vertrouw niet op sterke namen voor beveiliging. Ze bieden alleen een unieke identiteit.

Een sterk benoemde assembly kan alleen typen van andere sterk benoemde assembly's gebruiken. Anders zou de integriteit van de sterk benoemde assembly worden aangetast.

Notitie

Hoewel .NET Core ondersteuning biedt voor sterk benoemde assembly's en alle assembly's in de .NET Core-bibliotheek zijn ondertekend, hebben de meeste assembly's van derden geen sterke namen nodig. Zie Strong Name Signing op GitHub voor meer informatie.

Scenario voor sterke naam

In het volgende scenario ziet u een overzicht van het proces voor het ondertekenen van een assembly met een sterke naam en verwijst u deze later naar die naam.

  1. Assembly A wordt gemaakt met een sterke naam met behulp van een van de volgende methoden:

    • Een ontwikkelomgeving gebruiken die ondersteuning biedt voor het maken van sterke namen, zoals Visual Studio.

    • Het maken van een cryptografisch sleutelpaar met behulp van het hulpprogramma Strong Name (Sn.exe) en het toewijzen van dat sleutelpaar aan de assembly met behulp van een opdrachtregelcompilator of de Assembly Linker (Al.exe). De Windows SDK biedt zowel Sn.exe als Al.exe.

  2. De ontwikkelomgeving of het hulpprogramma ondertekent de hash van het bestand met het manifest van de assembly met de persoonlijke sleutel van de ontwikkelaar. Deze digitale handtekening wordt opgeslagen in het draagbare uitvoerbare bestand (PE) dat assembly A's manifest bevat.

  3. Assembly B is een consument van Assembly A. De naslagsectie van het manifest van Assembly B bevat een token dat de openbare sleutel van Assembly A vertegenwoordigt. Een token is een deel van de volledige openbare sleutel en wordt gebruikt in plaats van de sleutel zelf om ruimte te besparen.

  4. De algemene taalruntime controleert de sterke naamhandtekening wanneer de assembly in de algemene assemblycache wordt geplaatst. Bij binding met een sterke naam tijdens runtime vergelijkt de algemene taalruntime de sleutel die is opgeslagen in het manifest van assembly B met de sleutel die wordt gebruikt om de sterke naam voor Assembly A te genereren. Als de .NET-beveiligingscontroles slagen en de binding slaagt, heeft Assembly B een garantie dat assembly A's bits niet zijn gemanipuleerd en dat deze bits daadwerkelijk afkomstig zijn van de ontwikkelaars van Assembly A.

Notitie

In dit scenario worden geen vertrouwensproblemen opgelost. Assembly's kunnen naast een sterke naam volledige Microsoft Authenticode-handtekeningen bevatten. Authenticode-handtekeningen bevatten een certificaat waarmee een vertrouwensrelatie tot stand wordt brengt. Het is belangrijk te weten dat voor sterke namen geen code op deze manier hoeft te worden aangemeld. Sterke namen bieden alleen een unieke identiteit.

Handtekeningverificatie van vertrouwde assembly's overslaan

Vanaf .NET Framework 3.5 Service Pack 1 worden handtekeningen met een sterke naam niet gevalideerd wanneer een assembly wordt geladen in een volledig vertrouwensdomein, zoals het standaardtoepassingsdomein voor de MyComputer zone. Dit wordt de functie voor het overslaan van sterke namen genoemd. In een omgeving met volledige vertrouwensrelaties wordt er altijd behoefte aan StrongNameIdentityPermission geslaagde, volledig vertrouwde assembly's, ongeacht hun handtekening. De functie voor het overslaan van sterke namen voorkomt de onnodige overhead van verificatie van sterke naamshandtekeningen van assembly's in deze situatie, waardoor de assembly's sneller kunnen worden geladen.

De bypass-functie is van toepassing op elke assembly die is ondertekend met een sterke naam en die de volgende kenmerken heeft:

  • Volledig vertrouwd zonder StrongName bewijs (bijvoorbeeld zone-bewijs MyComputer ).

  • Geladen in een volledig vertrouwde AppDomain.

  • Geladen vanaf een locatie onder de ApplicationBase eigenschap van die AppDomainlocatie.

  • Geen vertraging ondertekend.

Deze functie kan worden uitgeschakeld voor afzonderlijke toepassingen of voor een computer. Zie Procedure : Schakel de functie voor het overslaan van sterke namen uit.

Title Beschrijving
Procedure: Een openbaar-persoonlijk sleutelpaar maken Beschrijft hoe u een cryptografisch sleutelpaar maakt voor het ondertekenen van een assembly.
Procedure: Een assembly ondertekenen met een sterke naam Hierin wordt beschreven hoe u een sterk benoemde assembly maakt.
Verbeterde sterke naamgeving Hierin worden verbeteringen beschreven voor sterke namen in .NET Framework 4.5.
Procedure: Verwijzen naar een sterk benoemde assembly Hierin wordt beschreven hoe u tijdens het compileren of runtime naar typen of resources in een sterk benoemde assembly verwijst.
Procedure: De functie voor het overslaan van sterke namen uitschakelen Hierin wordt beschreven hoe u de functie uitschakelt waarmee de validatie van handtekeningen met een sterke naam wordt overgeslagen. Deze functie kan worden uitgeschakeld voor alle toepassingen of voor specifieke toepassingen.
Assembly's maken Biedt een overzicht van assembly's met één bestand en meerdere bestanden.
Een assembly uitstellen in Visual Studio Hierin wordt uitgelegd hoe u een assembly ondertekent met een sterke naam nadat de assembly is gemaakt.
Sn.exe (hulpmiddel Sterke naam) Beschrijft het hulpprogramma dat is opgenomen in .NET Framework waarmee u assembly's met sterke namen kunt maken. Dit hulpprogramma biedt opties voor sleutelbeheer, het genereren van handtekeningen en handtekeningverificatie.
Al.exe (assembly-linker) Beschrijft het hulpprogramma dat is opgenomen in .NET Framework waarmee een bestand wordt gegenereerd met een assemblymanifest van modules of resourcebestanden.