Hoppa till innehåll

Webinar: Registrera dig för vårt kommande webbinarium

Registrera nu

Allt du behöver veta om NuGet-signering

Allt om Nugget-signering

Vad är NuGet?

NuGet är den officiella pakethanteraren för .Net-ekosystemet. Den tillhandahåller plattformar och verktyg som hjälper utvecklare att skapa, publicera och använda .Net-paket. Du undrar säkert vad ett paket är! Paket kan generellt sett vara kompilerade bibliotek packade med beskrivande metadata till en snygg delbar enhet. NuGets jobb är att göra dessa bibliotek så tillgängliga och enkla att dela som möjligt i form av paket. NuGet hjälper utvecklare att utnyttja ett helt ekosystem och bygga vidare på befintliga lösningar istället för att bygga allt från grunden.

Läs igenom artikeln nedan för att bättre förstå vad NuGet-signering är.

Ett NuGet-paket är ett komprimerat arkiv, identifierbart med filändelsen .nupkg, som omfattar kompilerad kod (DLL:er), associerade filer och ett beskrivande manifest som specificerar attribut som paketets version. Utvecklare som vill dela sin kod genererar dessa paket och släpper dem på en publik eller privat värd. Konsumenter av dessa paket hämtar dem från lämpliga värdar, integrerar dem i sina projekt och anropar sedan paketets funktionalitet i sin projektkod. Alla mellanliggande komplikationer hanteras sömlöst av NuGet självt.

NuGets mångsidighet sträcker sig till både publik nuget.org-hosting och stöd för privata värdar. Denna flexibilitet möjliggör användning av NuGet-paket för att dela kod exklusivt inom en organisation eller arbetsgrupp. Dessutom kan utvecklare använda NuGet-paket som en effektiv metod för att modularisera sin kod för användning enbart inom sina projekt. Ett NuGet-paket är en distribuerbar kodenhet utan några specifika krav eller implikationer angående delningsläget.

Låt oss prata om paketflödet

I sin offentliga roll är NuGet som ett stort bibliotek (nuget.org) med över 100 000 olika paket. Dessa paket används av många .NET/.NET Core-utvecklare varje dag. NuGet låter dig också ha ditt privata bibliotek i molnet (som på Azure DevOps), i ett privat nätverk eller bara på din dator. På så sätt kan bara vissa utvecklare med åtkomst till biblioteket använda dessa paket, och du kan dela dem med en specifik grupp. Du kan lära dig mer om dessa alternativ genom att vara värd för dina egna NuGet-flöden. Genom att konfigurera saker på ett visst sätt kan du styra vilka bibliotek en dator kan hämta paket från, vilket säkerställer att de kommer från specifika källor och inte bara det stora offentliga biblioteket (nuget.org).

Oavsett vad som händer är ett bibliotek som en mötesplats för paketskapare och paketanvändare. Skapare skapar användbara NuGet-paket och lägger dem i ett bibliotek. Användare letar sedan efter användbara paket i tillgängliga bibliotek, laddar ner dem och lägger till dem i sina projekt. Väl inne i ett projekt är dessa pakets verktyg redo att användas i resten av projektkoden.

Innan vi fördjupar oss i NuGet-signering, låt oss förstå vad kodsignering är.

Kodsignering är en kryptografisk en process som innebär att man kopplar en digital signatur till programvara för att verifiera dess ursprung och säkerställa att den inte har manipulerats. Denna digitala signatur genereras med hjälp av en privat nyckel och kan verifieras med motsvarande publika nyckel, vilket ger användarna förtroende för kodens äkthet och integritet.

Viktiga fördelar med kodsignering:

  1. Autencitet

    Kodsignering verifierar programvaruutgivarens identitet, vilket säkerställer att användarna kan lita på kodens källa.

  2. Integritet

    Att bifoga en digital signatur till koden kan upptäcka obehöriga ändringar och skydda mot manipulering.

  3. Manipulationssäker distribution

    Kodsignering gör det möjligt för utvecklare att distribuera sin programvara säkert, vilket minskar risken för skadliga ändringar under transport.

Förstå NuGet-signering

Som diskuterats ovan är NuGet en populär pakethanterare för .NET-utveckling, vilket gör det möjligt för utvecklare att enkelt dela och använda kod. NuGet-signering är en utökning av kodsignering skräddarsydd för NuGet-paket. När ett NuGet-paket signeras inkluderar det en digital signatur som ger samma fördelar som traditionell kodsignering, vilket säkerställer den paketerade kodens äkthet och integritet.

Allmänna krav för NuGet-signering

  1. Säkerställ att ett signerat paket förblir kompatibelt med paketläsare och -skrivare som saknar stöd för paketsignering

  2. Integrera paketsignaturen på ett invecklat sätt i paketfilen.

  3. Följ strikt regeln att varje signerat paket ska innehålla exakt en primär signatur. (medsignering är uttryckligen förbjudet)

  4. Helst bör den primära signaturen anges som antingen en författar- eller en arkivsignatur.

  5. När du använder en författarsignatur, se till att den fungerar som den primära signaturen. Ta bort den befintliga primära signaturen innan du lägger till en författarsignatur i ett redan signerat paket.

Minimikrav för certifikat

Ett NuGet-signeringscertifikat MÅSTE uppfylla följande minimikrav:

  1. Ocuco-landskapet certifikat MÅSTE vara giltig för signeringsändamålet id-kp-kod [RFC 5280 avsnitt 4.2.1.12].

  2. Certifikatet MÅSTE ha en RSA en publik nyckellängd på 2048 bitar eller högre.

Ett tidsstämplingscertifikat MÅSTE uppfylla följande minimikrav:

  1. Certifikatet MÅSTE vara giltigt för ändamålet id-kp-timeStamping [RFC 5280 avsnitt 4.2.1.12].

  2. Certifikatet MÅSTE ha en RSA-nyckellängd på 2048 bitar eller högre.

Vid signeringstillfället MÅSTE ett certifikat vara inom sin giltighetstid enligt paketets författare och FÅR INTE återkallas. Vid valideringstillfället återkallelse av certifikat status BÖR kontrolleras igen; paketläsare KAN dock misslyckas med att öppnas om återkallningsstatusen inte är tillgänglig (t.ex. om en CRL inte är tillgänglig).

Certifikat FÅR INTE ha livstidssignerings-EKU (1.3.6.1.4.1.311.10.3.13).

Lösning för företagskodsignering

Få en lösning för alla dina behov av kodsignering och kryptografi för mjukvara med vår kodsigneringslösning.

Stödda algoritmer:

Följande hashalgoritmer MÅSTE stödjas:

Hash-algoritmHash-Algoritm-Oid
SHA-2-2562.16.840.1.101.3.4.2.1
SHA-2-3842.16.840.1.101.3.4.2.2
SHA-2-5122.16.840.1.101.3.4.2.3

NuGet-signeringsarbetsflöde – Signera ett paket

Följande steg beskrivs för författaren som signerar ett paket.

Steg 1: Avgör om paketet är signerat

  1. Om paketet är signerat och signeringsoperationen borde inte skriva över en befintlig signatur – signeringsåtgärden misslyckas med ett meddelande om att "paketet redan är signerat".
  2. Om paketet är signerat och signeringsoperationen skall skriv över en befintlig signatur – ta bort den befintliga signaturen och följ steg 2
  3. Om paketet inte är signerat, fortsätt med steg 2

steg 2Verifiera att signeringscertifikatet uppfyller minimikraven (som nämnts ovan)

Steg 3: Verifiera att den stödda hash, signatur- och tidsstämpelhashalgoritmer används. (som nämnts ovan)

Steg 4:  Generera paketsignaturfil

  1. Skapa författarsignatur
  2. Hämta en tidsstämpel från författarsignaturen

    Kontrollera att tidsstämpelns signeringscertifikat uppfyller certifikatets minimikrav (som nämnts ovan) och använder den hashalgoritm som stöds.

  3. Utöka författarsignaturen till CAdES-T [RFC 5126]
  4. Koda författarsignaturen CMS SignedData
  5. Skriv den kodade författarsignaturen till filen

Steg 5: Lägg till paketsignaturfilen som en okomprimerad (lagrad) fil till paketet som signeras

Steg 6: Validera det signerade paketet

  1. Avgör om paketet är signerat (om det inte är signerat, stoppa valideringen omedelbart)
  2. Verifiera att paketsignaturfilen är en okomprimerad och vanlig fil.
  3. Kontrollera att paketets signaturformat stöds.
  4. Verifiera paketets integritet
  5. Verifiera giltighet och förtroende för den primära signaturen
  6. Om inga fel har uppstått, behandla paketet som ett giltigt signerat paket.

Slutsats

NuGet är en gratis pakethanterare med öppen källkod för .NET-ekosystemet. I en värld där mjukvara attacker i leveranskedjan ökar, implementerar robusta säkerhetsåtgärder som kodsignering och NuGet-signering är avgörande. Dessa metoder inger förtroende i programvaruleveranskedjan, vilket ger utvecklare och slutanvändare förtroende för äktheten och integriteten hos den kod de använder.

CodeSign Secure hjälper dig att signera NuGet-paket utan krångel. Med Encryption Consultings CodeSign Secure-lösning erbjuder vi en mycket effektiv och ändamålsenlig metod för att signera NuGet-paket. Vår lösning säkerställer inte bara säkerheten för dina paket genom robusta kryptografiska åtgärder utan effektiviserar även signeringsprocessen, vilket förbättrar den totala effektiviteten i din programvaruutvecklingslivscykel.

Referenser:

RFC 5126 – CMS Avancerade elektroniska signaturer (CAdES) (ietf.org)

RFC 5280 – Internet X.509 Public Key Infrastructure Certifikat och CRL-profil (Certificate Revocation List) (ietf.org)

RFC 3161 – Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP) (ietf.org)