- Was ist NuGet?
- Lassen Sie uns über den Paketfluss sprechen
- Grundlegendes zur NuGet-Signierung
- Allgemeine Anforderungen der NuGet-Signierung
- Mindestanforderungen für Zertifikate
- Unterstützte Algorithmen:
- NuGet-Signatur-Workflow – Signieren eines Pakets
- Fazit
- Referenzen: (Die Referenzliste bleibt in der wissenschaftlichen Zitierweise erhalten)
Was ist NuGet?
NuGet ist der offizielle Paketmanager für das .Net-Ökosystem. Es bietet Plattformen und Tools, die Entwicklern das Erstellen, Veröffentlichen und Nutzen von .Net-Paketen erleichtern. Sie fragen sich jetzt bestimmt: Was ist ein Paket? Pakete sind im Allgemeinen kompilierte Bibliotheken, die mit beschreibenden Metadaten zu einer benutzerfreundlichen, gemeinsam nutzbaren Einheit gepackt sind. NuGets Aufgabe ist es, diese Bibliotheken in Form von Paketen so zugänglich und leicht zugänglich wie möglich zu machen. NuGet unterstützt Entwickler dabei, ein gesamtes Ökosystem zu nutzen und auf bestehenden Lösungen aufzubauen, anstatt alles von Grund auf neu zu entwickeln.
Lesen Sie den folgenden Artikel, um besser zu verstehen, was NuGet Signing ist.
Ein NuGet-Paket ist ein komprimiertes Archiv, erkennbar an der Erweiterung .nupkg. Es enthält kompilierten Code (DLLs), zugehörige Dateien und ein beschreibendes Manifest mit Attributen wie der Paketversion. Entwickler, die ihren Code teilen möchten, generieren diese Pakete und veröffentlichen sie auf einem öffentlichen oder privaten Host. Nutzer dieser Pakete rufen sie von geeigneten Hosts ab, integrieren sie in ihre Projekte und rufen anschließend die Funktionalität des Pakets in ihrem Projektcode auf. Alle dazwischenliegenden Feinheiten werden nahtlos von NuGet selbst verwaltet.
Die Vielseitigkeit von NuGet erstreckt sich sowohl auf öffentliches Hosting auf nuget.org als auch auf die Unterstützung privater Hosts. Diese Flexibilität ermöglicht die Nutzung von NuGet-Paketen für die gemeinsame Nutzung von Code ausschließlich innerhalb einer Organisation oder Arbeitsgruppe. Darüber hinaus können Entwickler NuGet-Pakete als optimierte Methode zur Modularisierung ihres Codes für die ausschließliche Verwendung innerhalb ihrer Projekte einsetzen. Ein NuGet-Paket ist eine verteilbare Codeeinheit ohne spezifische Anforderungen oder Auswirkungen hinsichtlich des Freigabemodus.
Lassen Sie uns über den Paketfluss sprechen
In seiner öffentlichen Rolle ist NuGet wie eine große Bibliothek (nuget.org) mit über 100,000 verschiedenen Paketen. Diese Pakete werden täglich von vielen .NET/.NET Core-Entwicklern verwendet. Mit NuGet können Sie Ihre private Bibliothek auch in der Cloud (wie bei Azure DevOps), in einem privaten Netzwerk oder einfach auf Ihrem Computer speichern. Auf diese Weise können nur bestimmte Entwickler mit Zugriff auf die Bibliothek diese Pakete verwenden und Sie können sie für eine bestimmte Gruppe freigeben. Weitere Informationen zu diesen Optionen finden Sie unter Hosten Ihrer eigenen NuGet-Feeds. Durch bestimmte Einstellungen können Sie steuern, aus welchen Bibliotheken ein Computer Pakete beziehen kann, und sicherstellen, dass diese aus bestimmten Quellen und nicht nur aus der großen öffentlichen Bibliothek (nuget.org) stammen.
Eine Bibliothek ist wie ein Treffpunkt für Paketersteller und Paketnutzer. Ersteller erstellen hilfreiche NuGet-Pakete und stellen sie in einer Bibliothek bereit. Benutzer suchen dann in verfügbaren Bibliotheken nach nützlichen Paketen, laden sie herunter und fügen sie ihren Projekten hinzu. Sobald diese Tools in einem Projekt vorhanden sind, können sie im restlichen Projektcode verwendet werden.
Bevor wir uns eingehend mit der NuGet-Signierung befassen, sollten wir verstehen, was Code-Signierung ist.
Codesignatur ist eine kryptographisch Bei diesem Verfahren wird Software mit einer digitalen Signatur versehen, um ihre Herkunft zu verifizieren und sicherzustellen, dass sie nicht manipuliert wurde. Diese digitale Signatur wird mithilfe eines privaten Schlüssels generiert und kann mithilfe des entsprechenden öffentlichen Schlüssels verifiziert werden. Dies gibt den Benutzern Vertrauen in die Authentizität und Integrität des Codes.
Hauptvorteile der Code-Signierung:
-
Authentizität
Durch die Code-Signierung wird die Identität des Softwareherausgebers überprüft und sichergestellt, dass Benutzer der Codequelle vertrauen können.
-
Integrität
Durch das Anhängen einer digitalen Signatur an den Code können nicht autorisierte Änderungen erkannt und so vor Manipulationen geschützt werden.
-
Manipulationssichere Verteilung
Durch die Code-Signierung können Entwickler ihre Software sicher verteilen und so das Risiko böswilliger Änderungen während der Übertragung verringern.
Grundlegendes zur NuGet-Signierung
Wie bereits erwähnt, ist NuGet ein beliebter Paketmanager für die .NET-Entwicklung, der Entwicklern die einfache Freigabe und Nutzung von Code ermöglicht. Die NuGet-Signierung ist eine auf NuGet-Pakete zugeschnittene Erweiterung der Code-Signierung. Beim Signieren eines NuGet-Pakets wird eine digitale Signatur hinzugefügt, die dieselben Vorteile wie die herkömmliche Code-Signierung bietet und die Authentizität und Integrität des gepackten Codes gewährleistet.
Allgemeine Anforderungen der NuGet-Signierung
-
Stellen Sie sicher, dass ein signiertes Paket mit Paketlesern und -schreibern kompatibel bleibt, die keine Unterstützung für die Paketsignierung haben.
-
Integrieren Sie die Paketsignatur detailliert in die Paketdatei.
-
Halten Sie sich strikt an die Regel, dass jedes signierte Paket genau eine primäre Signatur enthalten muss. (Mitsignierung ausdrücklich nicht erlaubt)
-
Idealerweise legen Sie die primäre Signatur entweder als Autoren- oder Repository-Signatur fest.
-
Stellen Sie beim Anwenden einer Autorensignatur sicher, dass diese als primäre Signatur dient. Entfernen Sie die vorhandene primäre Signatur, bevor Sie einem bereits signierten Paket eine Autorensignatur hinzufügen.
Mindestanforderungen für Zertifikate
Ein NuGet-Signaturzertifikat MUSS die folgenden Mindestanforderungen erfüllen:
-
Die Bescheinigung MUSS für den Zweck der ID-KP-Code-Signierung gültig sein [RFC 5280, Abschnitt 4.2.1.12].
-
Das Zertifikat MUSS eine RSA Länge des öffentlichen Schlüssels von 2048 Bit oder mehr.
Ein Zeitstempelzertifikat MUSS die folgenden Mindestanforderungen erfüllen:
-
Das Zertifikat MUSS für den Zweck des ID-KP-TimeStamping gültig sein [RFC 5280 Abschnitt 4.2.1.12].
-
Das Zertifikat MUSS einen öffentlichen RSA-Schlüssel mit einer Länge von 2048 Bit oder mehr haben.
Zum Zeitpunkt der Signatur muss ein Zertifikat laut Paketautor innerhalb seiner Gültigkeitsdauer sein und darf NICHT widerrufen werden. Zum Zeitpunkt der Validierung muss das Widerruf des Zertifikats Der Status SOLLTE erneut überprüft werden. Das Öffnen von Paketlesern KANN jedoch fehlschlagen, wenn der Widerrufsstatus nicht verfügbar ist (z. B. wenn auf eine CRL nicht zugegriffen werden kann).
Zertifikate DÜRFEN NICHT über die lebenslange Signatur-EKU (1.3.6.1.4.1.311.10.3.13) verfügen.
Unterstützte Algorithmen:
Die folgenden Hash-Algorithmen MÜSSEN unterstützt werden:
| Hash-Algorithmus | Hash-Algorithmus-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-Signatur-Workflow – Signieren eines Pakets
Die folgenden Schritte werden für den Autor beschrieben, der ein Paket signiert.
Schritt 1: Ermitteln Sie, ob das Paket signiert ist
- Wenn das Paket signiert ist und der Signiervorgang sollte nicht eine vorhandene Signatur überschreiben – der Signiervorgang schlägt mit der Meldung „Das Paket ist bereits signiert“ fehl.
- Wenn das Paket signiert ist und der Signiervorgang sollte eine vorhandene Signatur überschreiben – die vorhandene Signatur entfernen und Schritt 2 befolgen
- Wenn das Paket nicht signiert ist, fahren Sie mit Schritt 2 fort
Schritt 2:: Überprüfen Sie, ob das Signaturzertifikat die Mindestanforderungen erfüllt (wie oben erwähnt).
Schritt 3: Überprüfen Sie, ob die unterstützten Hash-Es werden Hash-Algorithmen für Signaturen und Zeitstempel verwendet. (wie oben erwähnt)
Schritt 4: Paketsignaturdatei generieren
- Autorensignatur erstellen
- Erhalten Sie einen Zeitstempel aus der Autorensignatur
Bitte überprüfen Sie, ob das Zeitstempel-Signaturzertifikat die Mindestanforderungen für Zertifikate (wie oben erwähnt) erfüllt und den unterstützten Hash-Algorithmus verwendet.
- Erweitern Sie die Autorensignatur auf CAdES-T [RFC 5126]
- Kodieren Sie die Autorensignatur CMS SignedData
- Schreiben Sie die codierte Autorensignatur in die Datei
Schritt 5: Fügen Sie die Paketsignaturdatei als unkomprimierte (gespeicherte) Datei zum zu signierenden Paket hinzu
Schritt 6: Validieren des signierten Pakets
- Stellen Sie fest, ob das Paket signiert ist (wenn nicht, beenden Sie die Validierung sofort).
- Stellen Sie sicher, dass es sich bei der Paketsignaturdatei um eine unkomprimierte und reguläre Datei handelt.
- Überprüfen Sie, ob das Paketsignaturformat unterstützt wird.
- Überprüfen der Paketintegrität
- Überprüfen Sie die Gültigkeit und Vertrauenswürdigkeit der Primärsignatur
- Wenn keine Fehler aufgetreten sind, behandeln Sie das Paket als gültiges signiertes Paket.
Fazit
NuGet ist ein Open-Source- und kostenloser Paketmanager für das .NET-Ökosystem. In einer Welt, in der Software Angriffe auf die Lieferkette steigen, und es werden robuste Sicherheitsmaßnahmen umgesetzt, wie Codesignatur und NuGet Signing ist unerlässlich. Diese Praktiken schaffen Vertrauen in die Software-Lieferkette und geben Entwicklern und Endbenutzern Vertrauen in die Authentizität und Integrität des von ihnen verwendeten Codes.
CodeSign Secure hilft beim problemlosen Signieren von NuGet-Paketen. Mit der CodeSign Secure-Lösung von Encryption Consulting bieten wir einen hocheffektiven und effizienten Ansatz zum Signieren von NuGet-Paketen. Unsere Lösung gewährleistet nicht nur die Sicherheit Ihrer Pakete durch robuste kryptografische Maßnahmen, sondern optimiert auch den Signierungsprozess und steigert so die Gesamteffizienz Ihres Softwareentwicklungszyklus.
Referenzen: (Die Referenzliste bleibt in der wissenschaftlichen Zitierweise erhalten)
RFC 5126 – CMS Erweiterte elektronische Signaturen (CAdES) (ietf.org)
RFC 3161 – Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP) (ietf.org)
- Was ist NuGet?
- Lassen Sie uns über den Paketfluss sprechen
- Grundlegendes zur NuGet-Signierung
- Allgemeine Anforderungen der NuGet-Signierung
- Mindestanforderungen für Zertifikate
- Unterstützte Algorithmen:
- NuGet-Signatur-Workflow – Signieren eines Pakets
- Fazit
- Referenzen: (Die Referenzliste bleibt in der wissenschaftlichen Zitierweise erhalten)
