NuGet 簽署的套件驗證

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

NuGet 套件簽章會以 X.509 憑證為基礎,為了進行簽署的套件驗證,有個必要條件是對程式碼簽署和時間戳記有效的憑證根存放區。

從 .NET 6.0.400 SDK 開始,NuGet 使用 .NET SDK 中隨附的憑證套件組合,來驗證無法使用適當系統根存放區的已簽署套件。 這些套件組合均源自 Microsoft 信任的根程式,且包含與 Windows 上的根存放區相同的程式碼簽署和時間戳記憑證。 這些憑證套件組合應該包含驗證來自 NuGet.org \(英文\) 之套件所需的所有根憑證。

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

下列各節會針對每個作業系統描述:

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

Windows

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

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#11985 \(英文\) 和 NuGet/Home#11986 \(英文\)。

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

重要

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

另請參閱