Share via


已簽署的套件

NuGet 4.6.0+ 和 Visual Studio 2017 15.6 版和更新版本

NuGet 套件可以包含數字簽名,可防範遭竄改的內容。 此簽章是從 X.509 憑證產生,該憑證也會將真實性證明新增至封裝的實際來源。

已簽署的套件提供最強的端對端驗證。 NuGet 簽章有兩種不同類型的:

  • 作者簽章。 作者簽章可保證套件自作者簽署套件后尚未修改,無論從哪個存放庫或傳遞封裝的傳輸方法為何。 此外,撰寫簽署的套件會為 nuget.org 發佈管線提供額外的驗證機制,因為簽署憑證必須事先註冊。 如需詳細資訊,請參閱 註冊憑證
  • 存放庫簽章。 存放庫簽章可為存放庫中的所有套件提供完整性保證,不論這些套件是否經過簽署,即使這些套件是從與簽署所在原始存放庫不同的位置取得也一樣。

如需建立作者簽署套件的詳細資訊,請參閱 簽署套件nuget 簽署命令。 您可以使用 dotnet nuget verify 或 nuget verify 命令來驗證套件的簽章。

重要

目前只有 Windows 上的nuget.exe支援作者簽署套件。 不過,上傳至 nuget.org 的所有套件都會自動簽署存放庫。

憑證需求

套件簽署需要程式代碼簽署憑證,這是特殊類型的憑證,適用於 id-kp-codeSigning [RFC 5280 section 4.2.1.12]。 此外,憑證必須具有 2048 位或以上的 RSA 公鑰長度。

時間戳需求

簽署的套件應包含 RFC 3161 時間戳,以確保套件簽署憑證有效期間以外的簽章有效性。 用來簽署時間戳的憑證必須適用於 id-kp-timeStamping [RFC 5280 section 4.2.1.12]。 此外,憑證必須具有 2048 位或以上的 RSA 公鑰長度。

您可以在套件簽章技術規格 (GitHub) 中找到其他技術詳細數據。

NuGet.org 上的簽章需求

nuget.org 有接受已簽署套件的其他需求:

  • 主要簽章必須是作者簽章。
  • 主要簽章必須具有單一有效的時間戳。
  • 作者簽章及其時間戳簽章的 X.509 憑證:
    • 必須有 RSA 公鑰 2048 位或更高。
    • 必須在 nuget.org 的套件驗證時,在每個目前 UTC 時間的有效期間內。
    • 必須鏈結至預設在 Windows 上信任的受信任根授權單位。 使用自我發行憑證簽署的套件會遭到拒絕。
    • 必須對其用途有效:
      • 作者簽署憑證必須有效,才能進行程式代碼簽署。
      • 時間戳憑證必須有效,才能進行時間戳。
    • 在簽署時不得撤銷。 (在提交時可能不知道,因此 nuget.org 定期重新檢查撤銷狀態)。