已签名的程序包不需要安装任何特定操作;但是,如果内容自签名后已被修改,则安装将被阻止,并显示错误 NU3008。
警告
使用不受信任的证书签名的包被视为未签名,并且安装时没有任何警告或错误,就像任何其他未签名的包一样。
配置包签名要求
注释
需要 Windows 上的 NuGet 4.9.0+ 和 Visual Studio 版本 15.9 及更高版本
通过使用命令在 nuget.config 文件中将 signatureValidationMode 设置为 require,可以配置 NuGet 客户端对包签名的验证方式。
nuget.exe config -set signatureValidationMode=require
<config>
<add key="signatureValidationMode" value="require" />
</config>
此模式将验证所有包是否由 nuget.config 文件中信任的任何证书签名。 此文件允许你根据证书的指纹指定哪些作者和/或存储库受信任。
信任包作者
若要信任基于作者签名的包,请使用 trusted-signers 命令在 nuget.config中设置 author 属性。
nuget.exe trusted-signers Add -Name MyCompanyCert -CertificateFingerprint CE40881FF5F0AD3E58965DA20A9F571EF1651A56933748E1BF1C99E537C4E039 -FingerprintAlgorithm SHA256
<trustedSigners>
<author name="MyCompanyCert">
<certificate fingerprint="CE40881FF5F0AD3E58965DA20A9F571EF1651A56933748E1BF1C99E537C4E039" hashAlgorithm="SHA256" allowUntrustedRoot="false" />
</author>
</trustedSigners>
小窍门
nuget.exe使用 verify 命令获取SHA256证书指纹的值。
信任存储库中的所有包
若要信任基于存储库签名的包,请使用 repository 元素:
<trustedSigners>
<repository name="nuget.org" serviceIndex="https://api.nuget.org/v3/index.json">
<certificate fingerprint="0E5F38F57DC1BCC806D8494F4F90FBCEDD988B4676070...."
hashAlgorithm="SHA256"
allowUntrustedRoot="false" />
</repository>
</trustedSigners>
信任包所有者
存储库签名包括其他元数据,用于确定提交时包的所有者。 可以根据所有者列表限制存储库中的包:
<trustedSigners>
<repository name="nuget.org" serviceIndex="https://api.nuget.org/v3/index.json">
<certificate fingerprint="0E5F38F57DC1BCC806D8494F4F90FBCEDD988B4676070...."
hashAlgorithm="SHA256"
allowUntrustedRoot="false" />
<owners>microsoft;nuget</owners>
</repository>
</trustedSigners>
如果包具有多个所有者,并且其中任一所有者位于受信任的列表中,则包安装将成功。
不受信任的根证书
在某些情况下,你可能希望使用未链接到本地计算机中受信任根的证书启用验证。 可以使用 allowUntrustedRoot 属性来自定义这个行为。
同步存储库证书
包存储库应报出它们在 服务索引中使用的证书。 最终,存储库将更新这些证书,例如证书过期的时间。 发生这种情况时,具有特定策略的客户端需要更新配置以包含新添加的证书。 可以使用nuget.exe轻松升级与存储库关联的受信任签名者。
模式参考
可以在 nuget.config 参考中找到客户端策略的完整架构引用