Meteen naar de inhoud

webinar: Meld je aan voor ons aankomende webinar.

Aanmelden

Alles wat u moet weten over NuGet Signing

Alles over Nugget Signing

Wat is NuGet?

NuGet is de officiële pakketbeheerder voor het .Net-ecosysteem. Het biedt platforms en tools waarmee ontwikkelaars .Net-pakketten kunnen maken, publiceren en gebruiken. Je vraagt ​​je nu vast af: wat is een pakket? Pakketten kunnen over het algemeen gecompileerde bibliotheken zijn, gevuld met beschrijvende metadata tot een overzichtelijke, deelbare eenheid. NuGet's taak is om die bibliotheken zo toegankelijk en gemakkelijk mogelijk te delen te maken in de vorm van pakketten. NuGet helpt ontwikkelaars een volledig ecosysteem te benutten en voort te bouwen op bestaande oplossingen in plaats van alles vanaf nul te bouwen.

Lees het onderstaande artikel om beter te begrijpen wat NuGet Signing is.

Een NuGet-pakket is een gecomprimeerd archief, herkenbaar aan de extensie .nupkg, dat gecompileerde code (DLL's), bijbehorende bestanden en een beschrijvend manifest met details over kenmerken zoals de versie van het pakket bevat. Ontwikkelaars die hun code willen delen, genereren deze pakketten en publiceren ze op een publieke of private host. Gebruikers van deze pakketten halen ze op van geschikte hosts, integreren ze in hun projecten en gebruiken vervolgens de functionaliteit van het pakket binnen hun projectcode. Alle tussenliggende complexiteit wordt naadloos beheerd door NuGet zelf.

De veelzijdigheid van NuGet strekt zich uit tot zowel openbare hosting op nuget.org als ondersteuning voor privéhosts. Deze flexibiliteit maakt het mogelijk om NuGet-pakketten te gebruiken voor het exclusief delen van code binnen een organisatie of werkgroep. Bovendien kunnen ontwikkelaars NuGet-pakketten gebruiken als een gestroomlijnde methode om hun code te modulariseren voor gebruik binnen hun projecten. Een NuGet-pakket is een distribueerbare code-eenheid zonder specifieke vereisten of implicaties met betrekking tot de deelmodus.

Laten we het hebben over de pakketstroom

In zijn publieke rol is NuGet als een grote bibliotheek (nuget.org) met meer dan 100,000 verschillende pakketten. Deze pakketten worden dagelijks door talloze .NET/.NET Core-ontwikkelaars gebruikt. Met NuGet kunt u uw privébibliotheek ook in de cloud (zoals op Azure DevOps), op een privénetwerk of gewoon op uw computer beheren. Zo kunnen alleen bepaalde ontwikkelaars met toegang tot de bibliotheek deze pakketten gebruiken en kunt u ze delen met een specifieke groep. U kunt meer over deze opties leren door uw eigen NuGet-feeds te hosten. Door dingen op een bepaalde manier in te stellen, kunt u bepalen uit welke bibliotheken een computer pakketten kan ophalen, zodat ze afkomstig zijn van specifieke bronnen en niet alleen van de grote openbare bibliotheek (nuget.org).

Hoe dan ook, een bibliotheek is een ontmoetingsplaats voor pakketmakers en pakketgebruikers. Makers maken handige NuGet-pakketten en plaatsen deze in een bibliotheek. Gebruikers zoeken vervolgens naar nuttige pakketten in toegankelijke bibliotheken, downloaden ze en voegen ze toe aan hun projecten. Eenmaal in een project zijn de tools van deze pakketten klaar voor gebruik in de rest van de projectcode.

Voordat we dieper ingaan op NuGet-ondertekening, moeten we eerst begrijpen wat codeondertekening is.

Code ondertekening is een cryptografische Proces waarbij een digitale handtekening aan software wordt gekoppeld om de oorsprong ervan te verifiëren en te garanderen dat er niet mee is geknoeid. Deze digitale handtekening wordt gegenereerd met een privésleutel en kan worden geverifieerd met de bijbehorende publieke sleutel, waardoor gebruikers vertrouwen hebben in de authenticiteit en integriteit van de code.

Belangrijkste voordelen van codeondertekening:

  1. Authenticity

    Met codeondertekening wordt de identiteit van de software-uitgever geverifieerd, zodat gebruikers de bron van de code kunnen vertrouwen.

  2. Integriteit

    Door een digitale handtekening aan de code toe te voegen, kunnen ongeautoriseerde wijzigingen worden gedetecteerd en wordt manipulatie voorkomen.

  3. Fraudebestendige distributie

    Dankzij codeondertekening kunnen ontwikkelaars hun software veilig distribueren, waardoor het risico op kwaadaardige wijzigingen tijdens de overdracht wordt verkleind.

NuGet-ondertekening begrijpen

Zoals hierboven besproken, is NuGet een populaire pakketbeheerder voor .NET-ontwikkeling, waarmee ontwikkelaars eenvoudig code kunnen delen en gebruiken. NuGet-ondertekening is een uitbreiding van codeondertekening, speciaal ontwikkeld voor NuGet-pakketten. Wanneer een NuGet-pakket wordt ondertekend, bevat het een digitale handtekening die dezelfde voordelen biedt als traditionele codeondertekening, waardoor de authenticiteit en integriteit van de verpakte code worden gewaarborgd.

Algemene vereisten voor NuGet Signing

  1. Zorg ervoor dat een ondertekend pakket compatibel blijft met pakketlezers en -schrijvers die geen ondersteuning bieden voor pakketondertekening

  2. Integreer de pakkethandtekening op complexe wijze in het pakketbestand.

  3. Houd u strikt aan de regel dat elk ondertekend pakket precies één primaire handtekening mag bevatten. (Medeondertekening is expliciet niet toegestaan)

  4. Idealiter geeft u de primaire handtekening aan als een auteurs- of repositoryhandtekening.

  5. Zorg er bij het toepassen van een auteurshandtekening voor dat deze als primaire handtekening fungeert. Verwijder de bestaande primaire handtekening voordat u een auteurshandtekening toevoegt aan een reeds ondertekend pakket.

Minimale certificaatvereisten

Een NuGet-ondertekeningscertificaat MOET aan de volgende minimumvereisten voldoen:

  1. De Politia Militar hield zelfs tijdens de pre-carnaval festiviteiten de zaken al nauwlettend in de gaten. certificaat MOET geldig zijn voor het id-kp-codeSigning-doel [RFC 5280 sectie 4.2.1.12].

  2. Het certificaat MOET een RSA openbare sleutellengte van 2048 bits of hoger.

Een tijdstempelcertificaat MOET aan de volgende minimumvereisten voldoen:

  1. Het certificaat MOET geldig zijn voor het id-kp-timeStamping-doel [RFC 5280 sectie 4.2.1.12].

  2. Het certificaat MOET een RSA-openbare sleutellengte van 2048 bits of hoger hebben.

Op het moment van ondertekening MOET een certificaat binnen de geldigheidsperiode vallen volgens de pakketauteur en MAG het NIET worden ingetrokken. Op het moment van validatie moet de intrekking van het certificaat De status MOET opnieuw worden gecontroleerd. Pakketlezers kunnen echter niet worden geopend als de intrekkingsstatus niet beschikbaar is (bijvoorbeeld omdat een CRL niet toegankelijk is).

Certificaten MOGEN NIET de levenslange ondertekenings-EKU (1.3.6.1.4.1.311.10.3.13) hebben.

Oplossing voor codeondertekening voor bedrijven

Ontvang één oplossing voor al uw cryptografische behoeften op het gebied van softwarecodeondertekening met onze codeondertekeningsoplossing.

Ondersteunde algoritmen:

De volgende hash-algoritmen MOETEN worden ondersteund:

Hash-algoritmeHash-algoritme-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-ondertekeningsworkflow: een pakket ondertekenen

De volgende stappen worden beschreven voor de auteur die een pakket ondertekent.

Stap 1: Bepalen of het pakket is ondertekend

  1. Als het pakket is ondertekend en de ondertekeningsbewerking zou niet een bestaande handtekening overschrijven – de ondertekeningsbewerking mislukt met de melding dat “het pakket al is ondertekend”.
  2. Als het pakket is ondertekend en de ondertekeningsbewerking moet een bestaande handtekening overschrijven – verwijder de bestaande handtekening en volg stap 2
  3. Als het pakket niet is ondertekend, ga dan verder met stap 2

Stap 2: Controleer of het ondertekeningscertificaat voldoet aan de minimale vereisten (zoals hierboven vermeld)

Stap 3: Controleer of de ondersteunde hacheeEr wordt gebruik gemaakt van hash-algoritmen voor handtekeningen en tijdstempels. (zoals hierboven vermeld)

Stap 4:  Genereer pakkethandtekeningbestand

  1. Auteurshandtekening maken
  2. Een tijdstempel verkrijgen van de handtekening van de auteur

    Controleer of het tijdstempelondertekeningscertificaat voldoet aan de minimale certificaatvereisten (zoals hierboven vermeld) en of het ondersteunde hash-algoritme wordt gebruikt.

  3. Breid de auteurshandtekening uit naar CAdES-T [RFC 5126]
  4. Codeer de handtekening van de auteur CMS SignedData
  5. Schrijf de gecodeerde auteurshandtekening naar het bestand

Stap 5: Voeg het pakket-handtekeningbestand als een ongecomprimeerd (opgeslagen) bestand toe aan het te ondertekenen pakket

Stap 6: Valideer het ondertekende pakket

  1. Bepaal of het pakket is ondertekend (als het niet is ondertekend, stop dan onmiddellijk de validatie)
  2. Controleer of het handtekeningbestand van het pakket een ongecomprimeerd en normaal bestand is.
  3. Controleer of het pakkethandtekeningformaat wordt ondersteund.
  4. Controleer de integriteit van het pakket
  5. Controleer de geldigheid en het vertrouwen van de primaire handtekening
  6. Als er geen fouten zijn opgetreden, behandel het pakket dan als een geldig, ondertekend pakket.

Conclusie

NuGet is een open-source en gratis pakketbeheerder voor het .NET-ecosysteem. In een wereld waar software aanvallen op de toeleveringsketen zijn in opkomst en implementeren robuuste veiligheidsmaatregelen zoals code ondertekening en NuGet Signing is essentieel. Deze praktijken wekken vertrouwen in de softwaretoeleveringsketen en geven ontwikkelaars en eindgebruikers vertrouwen in de authenticiteit en integriteit van de code die ze gebruiken.

CodeSign Secure Helpt NuGet-pakketten probleemloos te ondertekenen. Met de CodeSign Secure-oplossing van Encryption Consulting bieden we een zeer effectieve en efficiënte aanpak voor het ondertekenen van NuGet-pakketten. Onze oplossing garandeert niet alleen de veiligheid van uw pakketten door middel van robuuste cryptografische maatregelen, maar stroomlijnt ook het ondertekeningsproces, waardoor de algehele efficiëntie van uw softwareontwikkelingscyclus wordt verbeterd.

Referenties:

RFC 5126 – CMS Geavanceerde Elektronische Handtekeningen (CAdES) (ietf.org)

RFC 5280 – Internet X.509 Public Key Infrastructure-certificaat en certificaatintrekkingslijst (CRL)-profiel (ietf.org)

RFC 3161 – Internet X.509 Public Key Infrastructure Tijdstempelprotocol (TSP) (ietf.org)