如何安全地存储 .pfx 密码以在 MSBuild 中使用?

Posted

技术标签:

【中文标题】如何安全地存储 .pfx 密码以在 MSBuild 中使用?【英文标题】:How do I securely store a .pfx password to use in MSBuild? 【发布时间】:2013-07-17 21:15:12 【问题描述】:

我需要将证书签名添加到我的构建中。下面是我编写的工作脚本示例,但它包含 .pfx 文件的密码。我无法在构建脚本中保留密码。在这种情况下,您会使用哪些“最佳做法”或技巧?

<ItemGroup Label="SignFiles">
  <SignFilesInclude="$(FileLocation)\**\*.exe"/>
</ItemGroup>

<Exec Command="$(SignTool) sign /v /ac C:\MSCV-VSClass3.cer /f C:\Certificate.pfx /p Password /t http://timestamp.verisign.com/scripts/timestamp.dll %(SignFiles.Identity)"/>

谷歌搜索后,我在多个地方读到,一旦您第一次使用密码运行脚本,.pfx 就会存储在证书存储中,之后构建脚本中将不需要密码。这行得通,但是我想确保这是最好的方法,或者更好的是,有一种方法可以避免将密码放入脚本中。

【问题讨论】:

【参考方案1】:

将您的 .pfx 文件导入到 Windows 证书管理器中,以获取构建时使用的用户帐户。然后使用signtool/sha1开关选择正确的证书,不需要密码。

    以构建用户身份登录 运行certmgr.msc 右键单击证书 - 当前用户 / 个人 / 证书,然后选择所有任务 / 导入... 选择您的 .pfx 文件,输入密码,然后单击下一步完成 双击导入的证书 在详细信息页面中,指纹算法应该是sha1 复制指纹,它看起来像12 34 56 78 90 ab cd ef 12 34 56 78 90 ab cd ef 12 34 56 78 signtool /sha1 1234567890abcdef1234567890abcdef12345678 /t http://timestamp.verisign.com/scripts/timestamp.dll %(SignFiles.Identity)

并且第 8 步不会要求输入密码。

【讨论】:

我相信signtool 命令行示例错过了sign 命令。应该是signtool sign /sha ... /t ... file

以上是关于如何安全地存储 .pfx 密码以在 MSBuild 中使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何转换 PFX 证书文件以在 linux 服务器上与 Apache 一起使用?

在 MSBuild、Team Build 和 TFS 中使用 PFX 文件对程序集进行签名

配置 Jenkins 以在 Linux 平台上运行 MSBuild

如何安全地存储用户的密码?

如何在 Android 上安全地存储密码?

如何创建一个 msbuild 目标以在“运行”目标(dotnet 运行)之后运行?