写着文章的之前,先要讲讲这个签章.windows vista 系统之后,微软强制要求驱动程序需要认证,所有安装到系统的内核驱动都需要微软认可的认证机构认可才可以安装到系统中,至于微软为什么要驱动程序签章,一是从安全角度考虑,经过了认证的驱动代码更加健壮,不会无故的冒出蓝屏之类的影响系统稳定性,二是商业需要,搞垄断啊,我自己搞一个规则,大家都要按照我这个规则来玩游戏,不按照规则来不让你玩!
公司在一个项目中用到了一个开源的虚拟磁盘驱动dokan,原来的项目负责人纠结了半天不知道为什么驱动程序在XP上运行好好的,一到WIN 7 ,server 2008上就不能运行了,纠结最后才发现了,擦,要签章认证了之后驱动才能用;不过还好,认证机构也只认钱,给钱什么都好办。这不,公司花了300刀,向赛门铁克申请了一个认证;
具体怎么申请的我就不知道了,大概是登陆到他们官网,填写公司名啊,联系人啊,一系列信息,然后交钱;
在申请过程中出现一个问题,因为申请人台湾部门的一个人去申请的,她选择的是浏览器启用本地的CSR(证书签发请求文件)生成,这个CSR会发给赛门铁克去认证,而证书是成对出现的,生成CSR文件同时,会有一个与之对应的私钥.key文件保存在本地的系统中。当这个CSR文件被批准之后,赛门铁克公司会发送一封已批准证书请求的邮件给你,
这个邮件中就有已批准之后的证书代码,以及一个link,这个链接就是代码签名证书的提取地址(实际上就是一个安装证书的过程,安装你自己的代码签名证书,带有私钥),最终生成PFK证书(带有私钥)。因为是由台湾的负责人去申请,私钥key保存在了台湾的负责人电脑上,结果我在大陆这边去提取,结果就是提取错误。
解决办法就是重新提交订单,保证提交和接受电脑是同一台电脑就行了;然后在发给你的邮箱里提取安装证书;
接下来就是导出这个安装好的证书。 导出方式:
打开IE浏览器,IE--工具--Internet选项--内容--证书---个人
选择刚才安装好的证书,这个证书一般就是已你公司的名字命名的。
点击导出,之后选择 导出私钥证书;
接下来选择" 个人资讯交换 -PKCS#12"
输入一个密码,这个密码是用来保护你的私钥的,下次再要导出的话就需要这个密码;
这样就导出了这个可以用来做驱动签章用的证书了,而且这个证书是经过了认证的!300刀一年!
windows驱动签章过程:
证书弄到了接下来就是对要签章的驱动文件签名
具体详细参考资料:
赛门铁克官方资料:
https://knowledge.verisign.com/support/code-signing-support/index?page=content&id=SO5820&actp=LIST&viewlocale=en_US&showDraft=false#
准备条件:
1、signtool.exe工具,这个工具室WDK安装包里的一个工具。网上说只要这个,但是赛门铁克上说必须安装整个WDK包。所以,安装整个WDK包!
2、微软交叉证书:MSCV-VSClass3.cer
3、刚才已经导出来的代码签名证书:****.pfx (公司名就不说了)
4、需要签章的文件,驱动文件sys,exe文件也可以签章哦
首先,打开CMD命令,CD到signtool中,(记得要先安装WDK),
敲一下命令:
signtool sign /v /ac "C:\Authenticode\MSCV-VSClass3.cer" /s /MY /N "*****公司" "C:\Authenticode\test.sys"
命令详解:
signtool --signtool.exe 微软提供的签章程序
sign --签章命令
/v --显示错误信息以及其他告警信息 可以不用
/ac 指定交叉证书路径 就是微软的那个MSCV-VSClass3.cer放在那里
/s 指定要在搜索证书时打开那个存储区 这里选的是个人存储区里的证书
/MY 个人存储区
/n 指定签名证书的主体名称,这个名称必须和你的证书中的主体名称一致! 必须是你之前导出来的那个证书的“颁发给”的值 一般是你公司名称
“***公司” 颁发给谁
"C:\Authenticode\test.sys" 待签的文件
如果签名成功会有 successful signed:1提示
如果能在证书签名的Cross Certificate Chain 最顶层是Microsoft Code Verification那么签名成功!