共用方式為


NuGet 簽署套件驗證

您可以 簽署 NuGet 套件 ,讓套件取用者驗證套件的真實性和完整性。 如果啟用驗證,.NET 會在套件還原作業期間驗證已簽署的套件,這會在套件取用者建置或執行其專案時自動發生。

NuGet 套件簽章使用 X.509 憑證為基礎,而已簽署的套件驗證所需的條件是憑證根存放區,該存放區須對程式碼簽署和時間戳記有效。

從 .NET 6.0.400 SDK 開始,NuGet 會使用 .NET SDK 中包含的憑證套件組合,來驗證找不到適合系統根存放區的已簽署套件。 這些套件組合的來源是來自 Microsoft受信任的根程式 ,而且包含與 Windows 上根存放區相同的程式代碼簽署和時間戳憑證。 這些憑證套件應包含驗證來自 NuGet.org 套件所需的所有根憑證。

某些 NuGet 命令,例如 signverify,一律執行已簽署的套件驗證。

每個作業系統的下列各節提供說明:

  • 預設會在還原作業期間啟用隱含驗證時。
  • 如何啟用它。
  • 使用哪些根存放區。

窗戶

驗證一律會在套件還原作業期間啟用。

NuGet 會在 Windows 上使用預設根存放區,其已經支援一般用途的程式代碼簽署和時間戳。 不會使用 .NET SDK 憑證套件組合。 在引進這些功能的 .NET SDK 版本中,所有已簽署的套件驗證功能都在 Windows 平台上獲得支援。

Linux

這很重要

雖然 .NET 5 SDK 中已新增已簽署的套件驗證功能,但在 .NET 6.0.400 SDK 之前,Linux 上不支援此功能。 請勿搭配 6.0.400 之前的 .NET SDK 版本使用已簽署的套件驗證。

在 .NET 8 SDK 之前,預設會在套件還原作業期間停用驗證。 若要加入,請將環境變數 DOTNET_NUGET_SIGNATURE_VERIFICATION 設定為 true

從 .NET 8 SDK 開始,預設會啟用驗證。 若要離開,請將環境變數 DOTNET_NUGET_SIGNATURE_VERIFICATION 設定為 false

針對程式代碼簽署憑證驗證,NuGet 會先在下列位置探查憑證套件組合:

/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem

如果找到有效的憑證套件組合,NuGet 將優先選擇它來代替 .NET SDK 的憑證套件進行程式代碼簽署。 如果它至少包含與 .NET SDK 憑證套件同樣的根證書集,那麼 NuGet 的簽署套件驗證應該會成功。 如果缺少跟證書,就像 NuGet.org 上已簽署套件中使用的憑證一樣,NuGet 簽署套件驗證將會失敗,且狀態不受信任(透過 NU3018NU3028)。 將根證書新增至此憑證套件組合可以啟用成功的驗證;不過,請記住,此憑證套件組合是全系統的信任存放區,而 .NET SDK 憑證套件組合則用於作為應用程式範圍的信任存放區。

如果在上述位置找不到有效的憑證套件組合,NuGet 會回復為使用 .NET SDK 的憑證套件組合進行程式代碼簽署。

針對時間戳憑證驗證,NuGet 一律會使用 .NET SDK 的憑證套件組合進行時間戳。

macOS

在套件還原作業期間,預設會停用驗證。 若要加入,請將環境變數 DOTNET_NUGET_SIGNATURE_VERIFICATION 設定為 true。 不過,我們建議您不要啟用驗證。 如需詳細資訊,請參閱 NuGet/Home#11985NuGet/Home#11986

NuGet 只會使用 .NET SDK 的憑證套件組合。

這很重要

雖然已在 .NET 5 SDK 中新增已簽署的套件驗證功能,但macOS目前不支援此功能。 請勿搭配 6.0.400 之前的 .NET SDK 版本使用已簽署的套件驗證。 預設將它保留為停用狀態。

另請參閱