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 te vergelijken met een grote bibliotheek ( nuget.org ) met meer dan 100,000 verschillende pakketten. Deze pakketten worden dagelijks door talloze .NET/.NET Core-ontwikkelaars gebruikt. NuGet biedt je ook de mogelijkheid om je eigen bibliotheek in de cloud (bijvoorbeeld op Azure DevOps), op een privénetwerk of gewoon op je computer te bewaren. Op deze manier kunnen alleen bepaalde ontwikkelaars met toegang tot de bibliotheek de pakketten gebruiken en kun je ze delen met een specifieke groep. Je kunt meer lezen over deze opties in het artikel 'Je eigen NuGet-feeds hosten'. Door de instellingen op een bepaalde manier aan te passen, kun je bepalen van welke bibliotheken een computer pakketten kan downloaden, zodat ze afkomstig zijn van specifieke bronnen en niet alleen van de grote publieke 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.
Codeondertekening is een cryptografisch proces waarbij een digitale handtekening aan software wordt toegevoegd om de herkomst ervan te verifiëren en te garanderen dat er niet mee is geknoeid. Deze digitale handtekening wordt gegenereerd met behulp van een privésleutel en kan worden geverifieerd met de bijbehorende publieke sleutel, waardoor gebruikers vertrouwen krijgen in de authenticiteit en integriteit van de code.
Belangrijkste voordelen van codeondertekening:
-
Authenticity
Met codeondertekening wordt de identiteit van de software-uitgever geverifieerd, zodat gebruikers de bron van de code kunnen vertrouwen.
-
Integriteit
Door een digitale handtekening aan de code toe te voegen, kunnen ongeautoriseerde wijzigingen worden gedetecteerd en wordt manipulatie voorkomen.
-
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
-
Zorg ervoor dat een ondertekend pakket compatibel blijft met pakketlezers en -schrijvers die geen ondersteuning bieden voor pakketondertekening
-
Integreer de pakkethandtekening op complexe wijze in het pakketbestand.
-
Houd u strikt aan de regel dat elk ondertekend pakket precies één primaire handtekening mag bevatten. (Medeondertekening is expliciet niet toegestaan)
-
Idealiter geeft u de primaire handtekening aan als een auteurs- of repositoryhandtekening.
-
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:
-
Het certificaat MOET geldig zijn voor het id-kp-codeSigning-doel [RFC 5280 sectie 4.2.1.12].
-
Het certificaat MOET een RSA- publieke sleutellengte van 2048 bits of hoger hebben.
Een tijdstempelcertificaat MOET aan de volgende minimumvereisten voldoen:
-
Het certificaat MOET geldig zijn voor het id-kp-timeStamping-doel [RFC 5280 sectie 4.2.1.12].
-
Het certificaat MOET een RSA-openbare sleutellengte van 2048 bits of hoger hebben.
Bij het ondertekenen moet een certificaat binnen de geldigheidsperiode vallen volgens de pakketontwikkelaar en mag het niet ingetrokken zijn. Bij de validatie moet de intrekkingsstatus van het certificaat opnieuw worden gecontroleerd; pakketlezers kunnen echter mogelijk niet openen als de intrekkingsstatus niet beschikbaar is (bijvoorbeeld als een CRL niet toegankelijk is).
Certificaten MOGEN NIET de levenslange ondertekenings-EKU (1.3.6.1.4.1.311.10.3.13) hebben.
Ondersteunde algoritmen:
De volgende hash-algoritmen MOETEN worden ondersteund:
| Hash-algoritme | Hash-algoritme-Oid |
| SHA-2-256 | 2.16.840.1.101.3.4.2.1 |
| SHA-2-384 | 2.16.840.1.101.3.4.2.2 |
| SHA-2-512 | 2.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: Controleer of het pakket is ondertekend.
- 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”.
- Als het pakket is ondertekend en de ondertekeningsbewerking moet een bestaande handtekening overschrijven – verwijder de bestaande handtekening en volg stap 2
- 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 hash- , handtekening- en tijdstempel-hashalgoritmen worden gebruikt. (zoals hierboven vermeld)
Stap 4: Genereer een pakkethandtekeningbestand.
- Auteurshandtekening maken
- 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.
- Breid de auteurshandtekening uit naar CAdES-T [RFC 5126]
- Codeer de handtekening van de auteur CMS SignedData
- Schrijf de gecodeerde auteurshandtekening naar het bestand
Stap 5: Voeg het pakkethandtekeningbestand als een niet-gecomprimeerd (opgeslagen) bestand toe aan het pakket dat wordt ondertekend.
Stap 6: Valideer het ondertekende pakket
- Bepaal of het pakket is ondertekend (als het niet is ondertekend, stop dan onmiddellijk de validatie)
- Controleer of het handtekeningbestand van het pakket een ongecomprimeerd en normaal bestand is.
- Controleer of het pakkethandtekeningformaat wordt ondersteund.
- Controleer de integriteit van het pakket
- Controleer de geldigheid en het vertrouwen van de primaire handtekening
- 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 waarin aanvallen op de softwareleveringsketen toenemen, is het implementeren van robuuste beveiligingsmaatregelen zoals codeondertekening en NuGet Signing essentieel. Deze praktijken versterken het vertrouwen in de softwareleveringsketen en geven ontwikkelaars en eindgebruikers de zekerheid dat de code die ze gebruiken authentiek en integer is.
CodeSign Secure maakt het ondertekenen van NuGet-pakketten probleemloos. Met de CodeSign Secure-oplossing van Encryption Consulting bieden we een zeer effectieve en efficiënte manier om NuGet-pakketten te ondertekenen. 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 3161 – Internet X.509 Public Key Infrastructure Tijdstempelprotocol (TSP) (ietf.org)
