管理包信任边界

安装已签名的包不需要任何特定操作;但是,如果内容在签名后被修改,则安装会被阻止并引发错误 NU3008

警告

使用不受信任的证书签名的包被视为未签名,并且在安装时不会像其他任何未签名的包一样发出任何警告或错误。

配置包签名要求

注意

在 Windows 上需要 NuGet 4.9.0+ 和 Visual Studio 版本 15.9 及更高版本

可使用 nuget config 命令,通过在 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 验证命令获取证书的指纹值 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 参考