簽署 NuGet 套件

已簽署的套件允許內容完整性驗證檢查,以提供防止內容竄改的保護。 套件簽章也作為套件實際來源和消費者加強套件真確性的真實單一來源。 此指南會假設您已建立套件

取得程式碼簽署憑證

有效的憑證可以從公用證書頒發機構單位取得,例如:

Windows 信任的證書頒發機構單位完整清單也可以從 http://aka.ms/trustcertpartners取得。

您可以基於測試目的使用自動發行的憑證。 不過,NuGet.org 不接受使用自我發行憑證簽署的套件。深入瞭解 如何建立測試憑證

匯出憑證檔案

簽署套件

使用 dotnet nuget 簽署 套件(需要 .NET 6.0.100 SDK 或更新版本)。

dotnet nuget sign MyPackage.nupkg --certificate-path <PathToTheCertificate> --timestamper <TimestampServiceURL>

使用 nuget 簽署 套件(需要nuget.exe 4.6.0 或更新版本):

nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>

提示

憑證提供者通常也會提供時間戳記伺服器 URL,可用於上方顯示的 Timestamper 選擇性引數。 請洽詢提供者的文件及 (或) 支援人員,以取得該服務 URL。

  • 您可以使用憑證存放區中可用的憑證,或使用檔案中的憑證。 請參閱 nuget sign 的 CLI 參考。
  • 簽署的套件應包含時間戳記,以確定簽署憑證過期時,簽章仍保持有效。 若不包含時間戳記,則簽署作業會產生警告
  • 您可以使用 nuget verify 查看指定套件的簽章詳細資料。

在 NuGet.org 上註冊憑證

若要發佈已簽署的套件,您必須先向 NuGet.org 註冊憑證。您需要以二進位 DER 格式作為 .cer 檔案的憑證。

  1. 登入 NuGet.org。
  2. 前往 Account settings (若您想要使用組織帳戶來註冊憑證,則前往 Manage Organization>Edit Organization)。
  3. 展開 Certificates 區段並選取 Register new
  4. 瀏覽並選取稍早匯出的憑證檔案。 Registered Certificates

注意

  • 一位使用者可以提交多個憑證,且多位使用者可以註冊同一個憑證。
  • 使用者在註冊憑證後,往後提交的所有套件都必須使用其中一項憑證簽署。 請參閱在 NuGet.org 上管理您套件的簽署需求
  • 使用者也可以從帳戶移除已註冊憑證。 移除憑證後,使用該憑證簽署的新套件將會提交失敗。 現有的套件則不會受影響。

發行套件

您現在已準備好將套件發佈至 NuGet.org。請參閱 發佈套件

建立測試憑證

您可以基於測試目的使用自動發行的憑證。 若要建立自動發行的憑證,請使用 New-SelfSignedCertificate PowerShell 命令

New-SelfSignedCertificate -Subject "CN=NuGet Test Developer, OU=Use for testing purposes ONLY" `
                          -FriendlyName "NuGetTestDeveloper" `
                          -Type CodeSigning `
                          -KeyUsage DigitalSignature `
                          -KeyLength 2048 `
                          -KeyAlgorithm RSA `
                          -HashAlgorithm SHA256 `
                          -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
                          -CertStoreLocation "Cert:\CurrentUser\My" 

此命令會建立測試憑證,可在目前使用者的個人憑證存放區中使用。 您可以透過執行 certmgr.msc 來開啟憑證存放區,以查看新建立的憑證。

警告

NuGet.org 不接受使用自動發行憑證簽署的套件。

在 NuGet.org 上管理您套件的簽署需求

  1. 登入 NuGet.org。

  2. 請前往 Manage PackagesConfigure package signers

  • 如果您是套件的唯一擁有者,您就是必要的簽署者,也就是說,您可以使用任何已註冊的憑證來簽署套件,並將套件發佈至 NuGet.org。

  • 根據預設,若套件擁有多位擁有者,則 [任何] 擁有者的憑證都可以用來簽署套件。 作為套件的共同擁有者,您可以將 [任何] 覆寫為自己或其他共同擁有者,使其成為必要簽署者。 如果您讓不具任何已註冊憑證的人員成為擁有者,會允許未簽署的套件。

  • 同樣地,若已為套件選取預設的 [任何] 選項,而該套件的其中一位擁有者具有已註冊憑證,但另一位則不具任何已註冊憑證,則不論是簽章由其中一位擁有者註冊的已簽署套件,或是未簽署的套件,NuGet.org 都會接受 (因為其中一位擁有者不具任何已註冊憑證)。