Udostępnij za pośrednictwem


Podpisane pakiety

NuGet 4.6.0+ i Visual Studio 2017 w wersji 15.6 lub nowszej

Pakiety NuGet mogą zawierać podpis cyfrowy, który zapewnia ochronę przed naruszoną zawartością. Ten podpis jest generowany na podstawie certyfikatu X.509, który dodaje również dowody autentyczności do rzeczywistego źródła pakietu.

Podpisane pakiety zapewniają najsilniejszą kompleksową walidację. Istnieją dwa różne typy podpisów NuGet:

  • Podpis autora. Podpis autora gwarantuje, że pakiet nie został zmodyfikowany od momentu podpisania pakietu przez autora, niezależnie od tego, z którego repozytorium lub jakiej metody transportu jest dostarczany pakiet. Ponadto pakiety podpisane przez autora zapewniają dodatkowy mechanizm uwierzytelniania do potoku publikowania nuget.org, ponieważ certyfikat podpisywania musi być zarejestrowany przed upływem czasu. Aby uzyskać więcej informacji, zobacz Rejestrowanie certyfikatów.
  • Podpis repozytorium. Podpisy repozytorium zapewniają gwarancję integralności dla wszystkich pakietów w repozytorium, niezależnie od tego, czy są one podpisane, czy nie, nawet jeśli te pakiety są uzyskiwane z innej lokalizacji niż oryginalne repozytorium, w którym zostały podpisane.

Aby uzyskać szczegółowe informacje na temat tworzenia podpisanego pakietu, zobacz Podpisywanie pakietów i polecenie podpisywania nuget. Podpisy pakietów można zweryfikować przy użyciu polecenia dotnet nuget verify lub nuget verify .

Ważne

Tworzenie pakietów podpisywania jest obecnie obsługiwane tylko przez nuget.exe w systemie Windows. Jednak wszystkie pakiety przekazane do nuget.org są automatycznie podpisane repozytorium.

Wymagania dotyczące certyfikatu

Podpisywanie pakietów wymaga certyfikatu podpisywania kodu, który jest specjalnym typem certyfikatu, który jest ważny do id-kp-codeSigning celów [RFC 5280 sekcja 4.2.1.12]. Ponadto certyfikat musi mieć długość klucza publicznego RSA o długości 2048 bitów lub wyższej.

Wymagania dotyczące sygnatury czasowej

Podpisane pakiety powinny zawierać sygnaturę czasową RFC 3161, aby zapewnić ważność podpisu poza okresem ważności certyfikatu podpisywania pakietu. Certyfikat użyty do podpisania znacznika czasu musi być ważny w id-kp-timeStamping celu [RFC 5280 sekcja 4.2.1.12]. Ponadto certyfikat musi mieć długość klucza publicznego RSA o długości 2048 bitów lub wyższej.

Dodatkowe szczegóły techniczne można znaleźć w specyfikacji technicznej podpisu pakietu (GitHub).

Wymagania dotyczące podpisu w NuGet.org

nuget.org ma dodatkowe wymagania dotyczące akceptowania podpisanego pakietu:

  • Podpis podstawowy musi być podpisem autora.
  • Sygnatura podstawowa musi mieć jeden prawidłowy znacznik czasu.
  • Certyfikaty X.509 dla podpisu autora i sygnatury czasowej:
    • Musi mieć klucz publiczny RSA 2048 bitów lub nowszy.
    • Musi należeć do okresu ważności bieżącego czasu UTC w czasie weryfikacji pakietu w nuget.org.
    • Musi łączyć się z zaufanym urzędem głównym, który jest domyślnie zaufany w systemie Windows. Pakiety podpisane przy użyciu certyfikatów wystawionych samodzielnie są odrzucane.
    • Musi być ważny w swoim celu:
      • Certyfikat podpisywania autora musi być ważny do podpisywania kodu.
      • Certyfikat sygnatury czasowej musi być ważny na potrzeby znacznika czasu.
    • Nie można odwołać w czasie podpisywania. (Może to nie być znane w czasie przesyłania, więc nuget.org okresowo ponownie sprawdzić stan odwołania).