在第一次构建之前了解 Visual Studio 密钥容器

Posted

技术标签:

【中文标题】在第一次构建之前了解 Visual Studio 密钥容器【英文标题】:Know the Visual Studio key container before the first build 【发布时间】:2019-05-02 17:16:49 【问题描述】:

我正在尝试自动化我们公司的所有构建和发布过程,但我正在努力完成一个很小的步骤:在本地机器中导入 PFX 密钥。 例如,我们有一台新的构建机器,我们想要构建的代码在构建过程中通过受密码保护的 PFX 文件进行签名。 当我在这台机器上运行 TFS 中的构建时,构建失败并出现此错误

Error MSB3325: Cannot import the following key file: Mykey.pfx.
The key file may be password protected.
To correct this, try to import the certificate again or manually install the certificate to the Strong Name CSP with the following key container name: VS_KEY_03AD4638FE10A12F

很好,正如here 所说,我只需要将 PFX 文件导入名为 VS_KEY_03AD4638FE10A12F 的容器中...但这是第一次失败构建发生后需要的手动步骤,我需要它不知道用于通过sn.exe 导入密钥的容器名称。

相反,我想提供一台已经能够编译代码的构建机器。

该容器名称是如何生成的?有没有办法在源代码中告诉使用固定容器,以便每次使用新机器构建时它都不会改变?或者,我们是否可以检索将在构建之前使用的密钥容器,以便添加导入 PFX 文件的构建步骤? 或者,有没有我可以使用的“通用”密钥容器(所有机器都一样)?

谢谢

【问题讨论】:

我会考虑让构建过程动态获取它,而不是让它成为环境的一部分。您可以将 pfx 和证书保存在具有不同权限的源代码控制中,这样只有构建服务才能获取它并与之交互(还有其他安全方法可以传递这些秘密)。 嗨@daughey。但是我如何“让构建过程动态获取它”?你知道它是否在构建过程中的任何地方预定义了吗? 我正在考虑使用一个没有密码保护的 pfx 文件,因此它不需要安装到容器中。显然回避了通过密码获得的安全性——因此拥有不同的存储库或受保护的源代码控制部分将在一定程度上取代它。 也许使用 sn.exe -c 清除当前容器,然后再次使用 sn.exe -c MyContainerName 创建一个具有众所周知名称的新容器? 【参考方案1】:

您可以使用SnInstallPfx.exe。它将确定容器名称并导入 pfx。

更多信息,请参阅以下blog article。

【讨论】:

以上是关于在第一次构建之前了解 Visual Studio 密钥容器的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio代码 - 在构建之前保存文件

Visual Studio 在开始构建之前挂起 20 秒

在 Visual Studio 中签入之前构建解决方案的规则

Visual Studio 代码分析 (fxCop) 仅在第一次构建后运行

在 Visual Studio 中增加构建版本号

Visual Studio 2015 (C++):在第一次构建错误时停止编译(不是第一个项目)