将 EV 证书与 ClickOnce 一起使用

Posted

技术标签:

【中文标题】将 EV 证书与 ClickOnce 一起使用【英文标题】:Using EV Certificate With ClickOnce 【发布时间】:2014-08-21 17:21:22 【问题描述】:

我的公司从赛门铁克购买了 EV 证书,用于我们生产的软件产品。具体称为:Symantec Class 3 Extended Validation Code Signing CA – G2

为了开发和构建此产品,我们使用 Visual Studio 2013,并使用 ClickOnce 作为发布和安装程序机制。我们遇到的问题是 ClickOnce 无法使用其内置的签名机制来应用 EV 证书。 ClickOnce 可以很好地看到证书,并允许我们使用“从存储中选择...”按钮来选择它。它在“证书”窗口中显示所有正确信息。但是当我们发布时遇到如下错误:

签名时出错:无法签名 bin\Release\app.publish\setup.exe。 SignTool 错误:发生了意外的内部错误。”

请注意,我们可以使用 SignTool.exe 从命令行应用 EV 证书,因此问题不在于该程序。

有没有人使用过这种 EV 证书和 ClickOnce 的组合?我们是否应该购买其他更适合 ClickOnce 的 EV 证书?

【问题讨论】:

我假设您收到了硬件 eToken 中的证书。您是否使用 SafeNet 驱动程序来使用它? 是的,我们有一个硬件 eToken 并且正在使用 SafeNet 驱动程序。我们知道这些是有效的,因为我们可以使用 SignTool.exe 和 Mage.exe 毫无问题地绑定 EV 证书。 SafeNet 也可以使用 signtool 和 mage,除了 ClickOnce 证书签名之外没有问题,但更改寄存器值似乎已经解决了。 【参考方案1】:

几天前我遇到了完全相同的问题,Digicert 售后服务已经能够解决它。尝试检查此注册键的值(在 regedit 中):

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Cryptography/Providers/SafeNet 智能卡密钥存储提供程序/别名

该值应该是“eToken Base Cryptographic Provider”而不是“eToken Base Cryctographic Provider”('p' 而不是 'c')。

正如 cmets 中所说,您必须在更改后重新启动。

希望对你有帮助。

【讨论】:

优秀。谢谢马克斯。我更正了我机器上的注册表项,并且几乎可以告诉它解决了这个问题。我不能 100% 确定,因为我的环境中发生了很多其他事情,我现在无法重现最初的失败。但是,如果这为您解决了问题,我相信它也可以解决我的问题。至少我有足够的信心将此标记为答案。感谢您的宝贵意见。 很好的答案。仅供参考,在那次更改之后我不得不重新启动我的机器(我想我也可以杀死/重置在后台运行的各种 SafeNet Exes)。 这个答案救了我的命!【参考方案2】:

无法评论(没有足够的代表)。花了很长时间才访问此页面,所以我想为后来来到这里的任何人添加以下信息。

来自 signtool 的完整错误消息(用于搜索引擎查找此站点的目的)是:

SignTool 错误:发生了意外的内部错误

错误:SignerSign() 失败。” (-1073741275/0xc0000225)

这仅在签署 sha256 时发生(对我们而言)。 sha1 工作正常。

@Max 的回答(注册表项中的错字是正确的。这是 SafeNet Authentication Client 8.2 版安装程序中的一个错误。我更改了注册表项,重新启动,一切都开始工作了。

9.0版本(Win8+版本)已修复。

【讨论】:

以上是关于将 EV 证书与 ClickOnce 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将必备组件与ClickOnce关联到一起

Clickonce 使用过期证书发布

ClickOnce部署:使用证书

ClickOnce应用程序已签名,证书位于适当的用户存储中,但仍显示“ Unknown Publisher”

使用 makecert/pvk2pfx 时,ClickOnce 签名者的证书对签名无效

.NET 4 ClickOnce 过期证书