由于领导不懂行,直接购买了GlobalSign的证书,结果引起了我这个开发人员痛苦的2星期之旅,说说大体情况:
目的:对买来的一个驱动程序进行签名,使之能够在Win x64情况下安装和使用
下载Windows Kits后安装,得到signtool.exe工具,用它进行签名。
公司名很快签上了,但是时间戳死活签不上,一运行就signtool就崩溃。可是
https://support.globalsign.com/customer/en/portal/articles/1491089
signtool sign /ac MSCrossCert.crt /f CodeSign.pfx /p password1234 /tr http://timestamp.globalsign.com/scripts/timestamp.dll filter.sys
文档上的例子明明写了一个例子啊,为啥我就死活运行不了呢?
一开始还以为timestamp.dll写错了,应该是timstamp.dll(少了一个e,网上搜索出来的结果都是少e的),还是不行。
最后不得不求助GlobalSign的售后,足足报告了5组测试命令与运行过程的全部情况。结果混蛋的GlobalSign售后看都不看内容,直接发给我已经看过一万遍的两个连接(其中第二个链接还是针对过时的驱动):
https://support.globalsign.com/customer/en/portal/articles/1491089
https://support.globalsign.com/customer/portal/articles/1217485
这样来来回回,整整13封邮件,问题还是没有得到解决。最后还是我发现了一件事情,他们给我的证书是不符合 RFC 3161的,所以必须用/t参数,而不是/tr。同时timestamp.dll拼写带e还是不带e,都是正确的,可是没人告诉我这件事情啊,让我疑惑了很久。
时间戳有了,signtool verify /v /kp 也显示正确无误,可是我的驱动还是无法使用,一调用就崩溃,一点有用的提示信息都没有,郁闷啊。。。因为无法判断出错原因,反反复复测试自己调用驱动的代码,试了一遍又一遍,实在是觉得自己的代码没问题,而确实是驱动本身的问题。
没办法,不能让驱动本身耽误开发,先开发业务流程吧。于是启动windows,按F8,进入“不检查签名”模式。
几天后,一切功能都开发完毕了,在“不检查签名模式”下运行良好,于是回到驱动签名的问题。
Windows正常启动模式下,死活还是无法安装驱动啊,更别提我调用的那些功能。
我还把自己的证书、密码、要签名的驱动、我签过名的驱动,全部发给了GlobalSign,要求他们帮我检查比较一下,问题到底出在哪里,可是他们看都不看(后来研究的结果表明,就是这个证书不能用来签名驱动,就这么简单的结果都不愿帮我试一下)。。。这服务,绝对差评。
无奈啊,只能在QQ群里求助,因为QQ群是全国范围的嘛,相关的高手应该都在里面了嘛。至于论坛,虽然也可提问,但是实时性太差,还要注册论坛什么的,放弃。
最后还是在一位VeriSign的朋友热心帮助下解决了问题,当场使用各种签名工具帮我实时测试,很快就有了结果。然后重新向GlobalSign申请内核证书,问题全部搞定。而且据这位VeriSign的朋友说,他们的证书不区分应用级别和内核级别,换而言之,直接就可对驱动签名。
这里是VeriSign的价格:
http://verisign.ert7.com/quotation.html
另外证书小白们,想节省时间精力、减少郁闷、加快项目开发,可联系我上面提到的两位VeriSign的朋友(QQ6220414和QQ1125803355)。
天地良心,我不是他们的托,他们也至今没有收取我一分钱(没一年之内必要买2份证书嘛!)。不过这态度和“售后”真没是没的说,明年一定买他们家的证书!