多开发人员环境中 PFX 文件的最佳实践

Posted

技术标签:

【中文标题】多开发人员环境中 PFX 文件的最佳实践【英文标题】:Best Practice for PFX Files in a Multi-Developer Environment 【发布时间】:2014-02-03 02:55:50 【问题描述】:

我花时间整理了诸如these之类的问题

到目前为止没有运气。我的公司有一个我们使用的 VeriSign 的 pfx 文件。我已将它添加到我的项目并在添加时输入密码,然后检查我的解决方案。然后我转到另一台机器,项目编译时出现以下错误:

无法导入密钥文件“xxx.pfx” - 错误“密钥文件可能受密码保护”

有没有办法避免在每个开发环境中输入 PFX 文件的密码?似乎我可以将我的引用指向可能解决此问题的 PFX 文件的服务器位置。但是,当我尝试在记事本中更改我的 .csproj 文件时:

<ManifestKeyFile>xxx.pfx</ManifestKeyFile>
to 
<ManifestKeyFile>\\server\VeriSign\xxx.pfx</ManifestKeyFile>

我收到有关文件名中非法字符的错误。

关于如何不必在每个开发环境中输入密码的任何建议?

提前致谢, 詹妮弗

【问题讨论】:

【参考方案1】:

我正在为已签名的 Excel 开发 VSTO 插件。我不知道这是否适用于您的项目类型或情况。

Visual Studio 实际上并不使用 pfx 文件对清单进行签名。它使用 Windows 证书存储中的证书对其进行签名,该证书在 ManifestCertificateThumbprint 属性中具有指纹。

<PropertyGroup>
    <ManifestKeyFile>some.pfx</ManifestKeyFile>
</PropertyGroup>
<PropertyGroup>
    <ManifestCertificateThumbprint>...</ManifestCertificateThumbprint>
</PropertyGroup>

ManifestKeyFile 是 Visual Studio 的提示,如果证书不在商店中,它可以在哪里找到证书。

当您创建一个新的 VSTO 项目时,它不包含这些属性中的任何一个,直到您第一次构建它。在第一次构建中,Visual Studio 会将您推入在存储中创建证书、设置 ManifestCertificateThumbprint、将证书导出到 pfx 文件并将 ManifestKeyFile 提示设置为指向该文件的工作流。将此项目添加到源代码管理会导致第二个开发人员具有不同的工作流程。对她来说,ManifestCertificateThumbprint 不在证书存储中,因此它使用ManifestKeyFile 提示在项目中定位 pfx 文件,并将该证书安装到存储中,这导致她输入 pfx 文件的密码.证书入库后,pfx文件就是项目中的货物。

这个工作流程很好。由于它是一个临时的、不受保护的本地证书,因此是否在开发人员之间共享并不重要。

您可能正在寻找的是这个工作流程:使用项目的“签名”选项卡上的 Select from Store... 选项来选择证书。它将删除ManifestKeyFile 提示。当其他开发人员从源代码​​管理中获取项目时,他们需要已经在他们的存储中拥有证书,因此您可以从项目中删除 PFX。本质上,临时开发证书的创建和分发成为网络管理问题,而不是开发/构建问题。管理员类型有很多方法可以将证书推送到域上的机器存储中。

在任何一种情况下,真实最终生产证书应该在构建机器的最后一分钟(使用临时开发证书构建之后)使用 Mage.exe(Manifest Generation 和编辑工具)。

【讨论】:

【参考方案2】:

你的方法是,ehm,本质上是不安全的。您应该、永远不要制作代码签名证书包括您团队中的所有开发人员普遍可以使用的私钥密码。

您应该明白,发布一款软件是具有法律约束力的行为,您的代码签名证书用于证明该软件的真实性并与最终用户/客户建立信任。你目前的做法完全破坏了这种信任。当您只允许公司/开发团队中的任何人访问此证书时,就像告诉

“嘿,我们的总经理是个盲人,他会在不阅读的情况下签署任何文件。”

相反,您应该使用由内部 CA 颁发的不受保护的开发证书,或申请 delay-signing。

生产代码签名证书应该在受控、安全的发布构建环境中可用。它应该在没有启用私钥导出的情况下导入证书存储。只有受信任的人,可能在他们的雇佣合同中有足够的法律条款,才能访问这个发布构建环境。

【讨论】:

谢谢,我完全同意这就是为什么我要问更好的方法是什么。我们都知道,像糖果一样给出密码并不是最好的方法。 @JenniferWhite 那么我不完全明白你为什么要这样做? :-) 让代码签名正常工作非常容易。开始延迟签署您的组装。设置构建服务器并使用sn.exe 使用生产证书对发布进行完全签名。

以上是关于多开发人员环境中 PFX 文件的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

多开发人员环境的 SVN 数据库版本控制

最佳实践 - Git + 构建自动化 - 将配置分开

asp.net mvc 开发人员的 javascript 最佳实践

标记 SQL Oracle 开发人员最佳实践

万字详解!Git 入门最佳实践

pfx是啥文件