提问人:Ian Boyd 提问时间:3/5/2009 最后编辑:GlorfindelIan Boyd 更新时间:3/5/2019 访问量:4275
WinQual:为什么 WER 不接受代码签名证书?
WinQual: Why would WER not accept code-signing certificates?
问:
自 2015 年 1 月 24 日起编辑:现在无法使用其他受信任的证书颁发机构。问题和答案并没有过时:
WinQual 仍拒绝签名:
当我们已经确定它是有效的数字签名时:
为了完整起见,我将把其他人所做的编辑留在下面;只是为了指出他错了。他可以忍受这种耻辱:
自 2014 年起编辑:现在可以使用其他受信任的证书颁发机构。问题和答案已经过时了。
2005 年,我尝试在 Microsoft 建立一个 WinQual 帐户,这样我就可以拿起通过 Windows 错误报告 (WER) 自动提交的(如果有的话)故障转储文件。我不被允许使用故障转储,因为我没有威瑞信证书。相反,我有一个更便宜的产品,由威瑞信子公司生产:Thawte。
您加入的方法是:对他们提供的示例 exe 进行数字签名。这证明您是签名应用程序的同一签名者,这些应用程序从野外获得了崩溃转储。
在加密方面,需要私钥才能在可执行文件上生成数字签名。只有该私钥的持有者才能为匹配的公钥创建签名。谁生成了该私钥并不重要。这包括从以下位置生成的证书:
然而,Microsof 的 WinQual 只接受威瑞信生成的数字证书。甚至威瑞信的子公司也不够好(Thawte)。
谁能想到 Microsoft 不想接受代码签名证书的任何技术、法律或道德原因?WinQual 网站说:
为什么需要数字证书 对于 Winqual 会员资格?
数字证书有助于保护 您的公司来自寻求的个人 冒充您的员工 或以其他方式实施以下行为的人 针对贵公司的欺诈行为。使用 数字证书可以证明 用户或 组织。
Thawte 数字证书是否不安全?
两年后,我向 WinQual 发送了提醒通知,说我一直在等待能够进入我的故障转储。WinQual 团队的回应是:
你好
感谢您的提醒。我们有 通知了适当的人 这仍然是一个请求。
2008年,我在Microsoft支持论坛上问了这个问题,得到的回答是:
我们仅设置为接受 VeriSign 此时的证书。我们有 没有压倒性的需求 支持其他类型的证书。
不“设置”接受其他类型的证书可能意味着什么?
如果对 WinQual.exe 测试应用进行签名的密钥的指纹与对可执行文件进行签名的指纹相同,则该可执行文件是我在野外获得的故障转储:已证明 - 它们是我的故障转储,请将它们交给我。
而且,与所有其他数字签名相比,并没有一个特殊的 API 来检查威瑞信数字签名是否有效。无论密钥由谁生成,有效的签名都有效。
Microsoft可以自由地不信任签名者,但这与身份不同。
所以这就是我的问题,谁能想到 WinQual 未设置为支持数字签名的任何实际原因?
有人推测,答案是他们只是懒惰:
我不知道,但我会假设 运行 winQual 的团队 系统是一个实时团队,而不是开发人员 团队 - 如在,个性和技能组合 面向维护现有 系统。不过我可能是错的。
他们不想做工作来改变它。但是谁能想到任何需要改变的东西?无论什么方式生成了密钥,它都是相同的逻辑:“指纹是否匹配”。
我错过了什么?
更新
很高兴听到其他开发人员的故事。这样我就知道我并不孤单,这个问题可以作为Microsoft改变的工具。即使我的初衷是抱怨咆哮,为了保持这是一个有效的 StackOverflow 问题,我正在寻找 Microsoft 只能接受 Verisign 证书的技术原因。
加密 API 并不关心颁发证书的公司名称是什么:它只关心签名者链是否指向受信任的根。
Microsoft 具体没有使用已建立的加密基础设施,而是仅限于 Verisign,这可能会发生什么?
如果有人能指出任何博客条目,其中项目经理或开发人员解释了原因,我可能会感到满意。
更新二
人们似乎错过了我问题的重点。Windows 已经具有代码基础结构,可确保根颁发机构信任数字签名证书。下面是我们签名的可执行文件之一上的数字签名的屏幕截图。
您可以看到我们的证书由 Thawte 的代码签名颁发机构证书签名,而该证书又由 Thawte 签名:
默认情况下,“解冻”证书随 Windows 一起提供:
Thawte Premium Server CA 足够好,每个 Windows 和 Internet Explorer 副本都已经信任它。并且已经有一个已建立的 API 来检查证书是否有效(即受信任)。
当 WinQual 的人出现时,他们不得不竭尽全力避免检查正确的方法,而是推出自己的解决方案,仅将 Verisign 硬编码为受信任的根。为什么他们会不遗余力地忽略其他受信任的根证书颁发机构,即运行其代码的 Windows 计算机上附带的颁发机构,而是对 Verisign 进行硬编码?
他们没有像其他人那样(Windows 资源管理器、Firefox、Chrome、Internet Explorer、Opera、CertMgr 等)这样做,而是特别只允许威瑞信。我的问题是为什么。
Why would WER not accept code-signing certificates?
如果只是:
- 因为最初写这篇文章的那个人不知道正确的方法
- 而不是花费大量时间研究正确的方法
- 他只是把一些东西放在一起
- 只是为了测试,他只对一个签名者进行了硬编码
- 完全打算稍后再回来修复它
- 但代码现在正在工作
- 它上线了,没有被修复
- 没有人愿意为破坏它负责
- 没有人愿意花钱来修复它
- 而且没有足够的客户抱怨将其作为高优先级
- 即使有很多人抱怨,购买威瑞信也只需 99 美元
- 所以你不能放手买一个威瑞信吗?
...那很好。除了我不相信。我不相信是测试代码进入了生产环境。我感觉到这是一个有意识的、具体的决定,让他们忽略了其他签名者。而且,他们确实并将继续尊重威瑞信。
但对于我的生活,我想不出原因。
答:
我们也有同样的问题。他们不会接受Comodo代码签名证书。这很可能是为了增加他们的集团收入(VeriSign/VeriTest,由MS拥有)。我不相信他们没有收到大量使用非 VeriSign 证书的请求。但是,你有什么选择......?
评论
好吧,我刚刚发布了另一个请求,基本上告诉他们,除非他们接受Comodo代码签名证书,否则我们不会参与。
Microsoft 联系我们,告诉我们他们有关于 Windows 7 的报告,他们希望我们查看,但我们无法登录,因为我们不使用 Verisign。好的,你联系了我......我需要多少身份验证?
我已经联系了产品经理,我们拭目以待。
为了回答你上面的半修辞问题 - 他们没有理由不能对其他签名的 EXE 进行身份验证。Windows 做到了,IE 做到了,代码已经在那里了。他们不需要做任何特别的事情来支持它。
更新:
在与 Microsoft 代表交谈后,我被告知您必须至少购买 99 美元的 versign 证书才能“验证”并获取错误报告。跛。
评论
医 管 局!我遇到了与我们的Comodo证书完全相同的方案。这是典型的欺凌行为,他们的回答完全是胡说八道。如果有的话,我不信任威瑞信而不是 Comodo 和 Thawte 等。我们不要忘记他们前段时间尝试过的东西。
问题实际上更深。
为了保持特殊地位,必须对我们的一种产品进行重新认证。当然,这只能通过VeriTest来完成。为了节省资金并能够在他们发现问题之前做出反应,我们决定选择自检选项,允许我们使用 Microsoft 的所谓“Works with”工具自行测试我们的软件。
虽然文档说您需要使用验证码证书对所有二进制代码进行签名才能通过 Windows Server 2008 R2 的验证,但没有人提到这实际上是可选的,不会对测试结果产生影响(直到您实际在报告页面上说此步骤是可选的,不会对测试结果产生影响)。
但是,在此之前,我们已经购买了Comodo证书,因为它的价格仅为VeriSign证书价格的四分之一,并且无论如何都做同样的事情。
在成功重新认证后不久,我们收到了 Microsoft 关于当前虚拟发布活动的通知以及参与其中的可能性(这是一件好事)。但是,要注册,我们需要输入 WinQual 并猜猜看......为此,我们当然需要VeriSign WinQual公司证书(至少)。
现在真正有趣的是,至少有两天,相应的VeriSign网站不可用。再过三天,就不可能获得这样的证书,直到现在他们甚至没有回应支持请求。
如果其他公司开始托管一个类似于 WinQual 的平台,除了它确实接受所有严肃出版商的证书之外,那不是很好吗?
乔尔。。。杰夫。。。来吧。这是给你的东西:
"[...]exhandler.com 就像 Winqual 一样,...但没有邪恶。
评论
同样的故事在这里,我正在认证Win7徽标的应用程序,以获得MS合作伙伴计划的积分。我购买了Comodo代码签名证书。该应用程序通过了测试,现在我正在尝试设置一个 Winqual 帐户,在最初对必须购买另一个签名证书感到生气之后,我延迟了 5 天,试图以 5 美元的价格实际购买这个“组织证书”99 美元。没办法,“VeriSign SSL 证书注册暂时不可用。请稍后再试“,这种支持也可能是我遇到过的最糟糕的。 我的天啊......请至少尝试阅读问题描述,甚至尝试重现步骤,不要只是给我一些愚蠢的知识库解决方案来解决另一个问题。 或者只是说该服务不可用,它将在 5 天内可用。 太令人沮丧了......
如果有人有同样的问题,只是一个更新,我终于得到了注册问题的答案并下了订单。(我想你需要在技术支持方面找到合适的人:)
“我们深表歉意。此错误是由于组织证书注册中的 bug 所致。如果在注册的“证书信息”(第 3 步)部分输入了美国以外的任何国家/地区,则会发生此错误。这已上报给现在正在修复它的工程师。同时,您可以执行以下操作以克服错误并完成注册: 在注册的“证书信息”部分,输入国家/地区为“美国”,将州输入为“加利福尼亚州”。所有其他信息都是正确的。注册完成后,请继续向我们发送您的证书的订单号以及您公司的正确国家/地区和州值,以回复此电子邮件。在颁发证书之前,我们将在我们的系统中编辑订单并为您输入正确的公司和国家/地区值。然后,我们颁发给您的证书将包含正确的信息。
完成代码签名和最近的 Winqual 注册后,以下是一些说明:
对于 Winqual 注册 (注册) ,不会根据 Winqual 数据库检查签名本身。Winqual 仅检查来自 VeriSign 的证书,以证明 VeriSign 检查了您的身份。然后他们从您的签名中获取您的公司名称。
在下一步中,您必须创建一个或多个“产品映射文件”(使用 Microsoft 的工具)并将其上传到 Winqual。之后,Winqual 服务器会根据所有映射文件检查数 TB 的崩溃数据库,并为您提供“事件”列表。(因此,您用于代码签名的签名非常无关紧要。
Microsoft 也无法接受其他证书颁发机构,这也不是技术原因。但是:他们将如何从中受益?此外,还有一个特别优惠计划,只需 99 美元即可从 VeriSign 获得为期一年的代码签名证书,如果将其与开发工具链或 MSDN/TechNet 会员资格的成本进行比较,它并不昂贵。
在我们的案例中,从 VeriSign 获得证书非常简单且非常快 - 整个过程在两天内完成。(我们不在美国,所以我预计会有延误。[澄清一下:您自己生成签名,它由company_private_key(用于签名)和company_public_key(用于验证代码签名)组成。任何证书颁发机构(如 VeriSign)都只需使用其私钥对您的company_public_key进行会签。这使您的证书可验证。
我们不知道 VeriSign 99 美元的证书也可以用于代码签名(它不仅仅是一个组织 ID)。因此,最初我们选择了另一个用于代码签名的 CA。然后,我们获得了用于 Winqual 注册的 VeriSign 证书。
Microsoft 在 WHDC 和 Winqual 上发布哪些签名提供程序被接受用于哪种类型的签名的信息。你真的不能责怪他们自己在从另一个 CA 获得证书之前没有阅读这篇文章,对吗?
希望这可能有助于提供一些启示。
评论
IsCertificateSignedByTrustedAuthority
IsCertificateSignedByVerisign
我刚刚注册了 WinQual,我一直在考虑这个问题;我想我现在有了答案。
简而言之:他们根本没有使用VeriSign作为证书:他们只是将验证您的身份的任务外包出去。
Microsoft 不希望你在未首先验证身份的情况下访问 WinQual 站点。因此,他们需要一个身份验证过程。
他们可能有一个部门向您收取 99 美元的费用,并进行验证。但他们已经在VeriSign拥有大量股份,而VeriSign已经有员工可以做到这一点。因此,他们使用注册证书的过程来验证您的身份。它根本不使用证书,只是委托 VeriSign 执行验证您的任务。
请注意,他们不要求您继续维护 VeriSign 证书来保留您的帐户:这只是加入该网站的一次性费用。
因为这是 Microsoft 验证您的身份的案例,他们信任 VeriSign,因为他们的手指在这个馅饼中,而且他们不太信任 Comodo,他们希望您为此目的使用 VeriSign,而不是任何其他证书。从开发人员的角度来看,这似乎有点傻,但我可以从他们的角度理解。
评论