[HOW TO]Windows Vista X64 内核驱动数字签名问题解释
在 Windows Vista x64 版本里面,微软要求所有的内核驱动都必须有合法的数字签名,否则拒绝加载。这个限制非常有效的抑制了利用驱动技术进行一些破坏的计算机恶意软件或者病毒,但是也给一些个人软件开发者带来的限制,因为这些个人软件开发者没法拥有合法的数字签名(需要购买,而且购买的时候需要填写合法的公司信息和公司地址等信息)。
当你拥有了一个有合法的数字签名认证机构(如:Verisign)颁发的私钥以后,怎么给驱动程序文件签名呢?
Windows Vista x64 对于内核驱动数字签名过程要求采用一种被称为cross-certificate 的方式进行。关于为什么要求使用 cross-certificate 的方式进行,请参考《Digital Signatures for Kernel Modules on x64-based Systems Running Windows Vista》,这里不再多说。
当我们拥有一个合法私钥以后,就可以开始对Windows Vista x64 内核驱动进行签名过程了。
- 首先需要下载 Windows Vista WDK 以获取新版本的 Signtool 等相关签名工具。
- 注意:必须使用 Windows Vista WDK 里面的Signtool 进行签名,其他版本的 Signtool 不支持 cross-certificate 方式。
- Windows Vista WDK 可以从 MSDN 订阅驱动获得。
- 安装完 Windows Vista WDK 以后,在 Windows Vista WDK 安装目录C:\WINDDK\6000\bin\SelfSign下可以找到下面需要的各种工具。
- 大多数情况下获得的私钥是 spc 文件和pvk文件,我们需要将私钥转换成 pfx 文件以便进行后面的操作。转换过程可以使用 C:\WINDDK\6000\bin\SelfSign\pvk2pfx.exe完成,使用参数是:
pvk2pfx.exe -pvk <pvk-file> -pi <pvk-pswd> -spc <spc-file> -pfx <pfx-file> -po <pfx-pwd>
- 获得pfx文件以后,双击pfx,将pfx导入系统。按照默认值选择即可。
- 要使用cross-certificate,需要获得另外的一个证书文件,访问 http://www.microsoft.com/whdc/winlogo/drvsign/crosscert.mspx,根据私钥的颁发者选择相应的证书文件,并下载到本地。
例如:我是从Verisign购买的私钥,那么我需要下载 VeriSign Class 3 Public Primary Certification Authority 下对应的证书文件。 - 将下载的cross-certificate证书文件解开压缩,和 signtool.exe 放在一个目录下。
- 以管理员权限打开命令行提示符,进入 C:\WINDDK\6000\bin\SelfSign目录,运行以下命令即可完成内核驱动的数字签名签署过程。
signtool.exe sign /v /ac MSCV-VSClass3.cer /s my /t http://timestamp.VeriSign.com/scripts/timstamp.dll <kernel driver path>
注:MSCV-VSClass3.cer 是 Verisign 的证书文件名字,请根据自己的事件情况替换。
Smallfrogs
http://www.KZTechs.com