WinQual仍然拒绝签名:
当我们已经确认这是一个有效的数字签名时:
为了完整起见,我将保留下面其他人所做的编辑;只是为了指出他是多么错误。他可以忍受那种羞耻:
截至2014年的编辑:现在可以使用其他可信证书颁发机构。问题和答案已过时。
在2005年,我尝试与微软建立WinQual账户,以便可以通过Windows错误报告(WER)自动获取我们(如果有的话)的崩溃转储文件。但由于我没有Verisign证书,因此无法获得我的崩溃转储文件。相反,我拥有一个更便宜的证书,由Verisign子公司Thawte生成。
你加入的方法是:你需要在他们提供的样本exe上进行数字签名。这证明了你是与他们从野外获取崩溃转储的应用程序相同的签名者。
从密码学角度来看,在可执行文件上生成数字签名需要私钥。只有持有该私钥的人才能为相应的公钥创建签名。生成该私钥的人无关紧要,包括以下生成的证书:
- 自签名 - 威尔斯·法戈 - DigiCert - SecureTrust - Trustware - QuoVadis - GoDaddy - Entrust - Cybertrust - GeoTrust - GlobalSign - Comodo - Thawte - 维信诺
微软的WinQual只接受由Verisign生成的数字证书。甚至连Verisign的子公司(如Thawte)也不行。
有人能想到微软不想接受代码签名证书的技术、法律或道德原因吗? WinQual网站上说:
为什么需要数字证书才能成为Winqual会员?
数字证书有助于保护您的公司免受试图冒充贵公司员工或以其他方式对贵公司实施欺诈行为的个人的侵害。使用数字证书可以为用户或组织提供身份证明。
难道Thawte的数字证书不安全吗?
两年后,我向WinQual发送了一封提醒通知,希望能够获取我的崩溃转储文件。WinQual团队的回复是:
您好,
感谢您的提醒。我们已经通知相关人员,这仍然是一个请求。
在2008年,我在Microsoft支持论坛上提出了这个问题,回复是:
我们只配置接受VeriSign证书。我们没有遇到过大量需要支持其他类型证书的情况。
不"设置"接受其他类型证书意味着什么?
如果签署WinQual.exe测试应用程序的密钥指纹与你在野外收到的可执行文件的崩溃转储所签署的密钥指纹相同:已经被证明,它们是我的崩溃转储,请把它们给我。
并且,这并不像有一种特殊的API可以检查Verisign数字签名是否有效,而不是所有其他数字签名。无论谁生成密钥,有效的签名都是有效的。
Microsoft是自由的,不信任签名者,但这与身份不同。
所以我的问题是,有没有人能想到任何实际的原因,为什么WinQual没有设置支持数字签名?一个人推测答案是因为他们懒:
“不是我知道但我会假设管理winQual系统的团队是一个运作中的团队而不是开发团队——也就是说,个性和技能集更适合于维护现有系统。虽然我可能错了。”
他们不想做改变它的工作。但是有人能想到需要改变什么吗?无论生成密钥的原因是什么,逻辑都是相同的:“指纹是否匹配”。
我错过了什么?
更新
听到其他开发者的故事很好。这样我知道我不是孤单的,而且这个问题可以成为微软改变的工具。即使我的初衷只是抱怨,为了让这个StackOverflow问题有效,我正在寻找一个技术原因为什么微软只能接受Verisign证书。
加密API并不关心颁发证书公司的名称:它只关心签名者链是否可追溯到可信任的根。
可能会出现什么情况,导致微软特别使用已建立的加密基础设施,而限制自己只能使用Verisign呢?
如果有人能指出任何博客文章,在其中一个程序经理或开发人员解释为什么,我可能会感到满意。
更新二
人们似乎没有理解我的问题的要点。Windows已经拥有代码基础设施,可以确保数字签名证书被根权限信任。这是我们签署的可执行文件上数字签名的截图:
您可以看到我们的证书是由Thawte的代码签名授权证书签署的,而该证书又由Thawte签署:
而"thawte"证书默认随Windows一起发货:
Thawte Premium Server CA足够好,以至于每个Windows和Internet Explorer副本都已经信任它。而且已经有一个既定的API来检查证书是否有效(即受信任)。当WinQual团队出现时,他们本应该努力以正确的方式进行检查,而不是自己开发解决方案,只将Verisign硬编码为受信任根。为什么他们要费尽心思地忽略其他可信任的根机构(这些机构已在运行其代码的Windows计算机上提供),而是硬编码Verisign?
与其他人做法不同(如Windows Explorer、Firefox、Chrome、Internet Explorer、Opera、CertMgr等),他们明确只允许Verisign。我的问题是为什么。
WER为什么不接受代码签名证书?
如果只是:
- 因为最初编写代码的人并不知道正确的方法
- 而且他不想花很多时间研究正确的方法
- 所以他随便写了一些代码
- 只是为了测试,他硬编码了一个签名者
- 完全有意回来修复它
- 但现在代码正在工作
- 它没有被修复就上线了
- 没有人愿意为此负责
- 也没有人想要花钱来修复它
- 没有足够多的客户投诉使其成为高优先级事项
- 即使有很多人投诉,只需要花99美元购买Verisign证书
- 那么你不能就这样放手让我们购买Verisign证书吗?
...如果真是这样,那就没问题了。只是我不相信这个故事。我感觉他们忽略其他签名者是出于有意的、具体的决定。他们只会承认Verisign。
但我想不出原因。