| title | 对 NuGet 包进行签名 |
|---|---|
| description | 介绍如何使用已签名包来启用内容完整性验证。 |
| author | rido-min |
| ms.author | rmpablos |
| ms.date | 03/06/2018 |
| ms.topic | conceptual |
| ms.reviewer | anangaur |
| ms.openlocfilehash | 00fe1d5fa81132b5d6826203a0d26e56aa8d4755 |
| ms.sourcegitcommit | 2b50c450cca521681a384aa466ab666679a40213 |
| ms.translationtype | HT |
| ms.contentlocale | zh-CN |
| ms.lasthandoff | 04/07/2020 |
| ms.locfileid | 79428617 |
已签名的包允许进行内容完整性验证检查,可有效防止内容被篡改。 此外,包的签名还可作为包的实际来源的单一可信来源,增强了对包使用者的身份验证。 本指南假定你已创建一个包。
可从以下公共证书颁发机构获取有效的证书:Symantec、DigiCert、Go Daddy、Global Sign、Comodo、Certum 等。可从 http://aka.ms/trustcertpartners 获取 Windows 信任的证书颁发机构完整列表。
可使用自颁发证书进行测试。 但 NuGet.org 不接受使用自颁发证书签名的包。详细了解如何创建测试证书
-
使用证书导出向导,可将现有的证书导出为二进制 DER 格式。
-
此外,还可使用 Export-Certificate PowerShell 命令导出证书。
Note
需要 nuget.exe 4.6.0 或更高版本。 即将推出 dotnet.exe 支持 - #7939
可使用 nuget sign 对包进行签名:
nuget sign MyPackage.nupkg -CertificatePath <PathToTheCertificate> -Timestamper <TimestampServiceURL>
Tip
证书提供程序通常还提供时间戳服务器 URL,可用于如上所示的 Timestamper 可选参数。 请参考提供程序文档和/或该服务 URL 的支持。
- 可使用证书存储中可用的证书或使用来自文件的证书。 请参阅 CLI 参考,了解 nuget sign。
- 已签名包应包含时间戳,用于确保签名证书过期时签名仍有效。 否则签名操作将引发一个警告。
- 使用 nuget verify 可查看给定包的签名详细信息。
要发布已签名的包,必须先使用 NuGet.org 注册证书。需要将证书设置为二进制 DER 格式的 .cer 文件。
- 登录到 NuGet.org。
- 转到
Account settings(如果希望使用组织帐户注册证书,则转到Manage Organization>Edit Organziation)。 - 展开
Certificates部分,并选择Register new。 - 浏览并选择前面导出的证书文件。

注意
- 一个用户可以提交多个证书并且多个用户可以注册同一个证书。
- 用户注册证书之后,所有未来的包提交都必须 使用其中一个证书进行签名。 请参阅管理 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 打开证书存储,查看新创建的证书。
Warning
NuGet.org 不接受使用自颁发证书签名的包。
-
登录到 NuGet.org。
-
如果你是包的唯一所有者,那么你就是所要求的签名者,即你可使用任何已注册的证书对包进行签名,然后将其发布到 NuGet.org。
-
如果包具有多个所有者,默认情况下,可以使用“任何”所有者的证书对包进行签名。 作为包的共同所有者,你可将“任何”重写为你自己或任何其他共同所有者,作为所需的签名者。 如果你让没有注册任何证书的人成为所有者,则将允许未签名的包。
-
同样,如果已选中某个包的默认“任何”选项,在该包中,有一个所有者已注册证书,而另一个所有者未注册任何证书,则 NuGet.org 接受已签名的包(由其中一个所有者注册签名)或接受未签名的包(因为其中一个所有者未注册任何证书)。

