在Windows Vista 和Windows 7 64位系统下安装的内核驱动程序都需要经过证书数字签名,否则无法安装。本文介绍如何给驱动文件进行签名。
签名介绍
驱动文件进行签名首先需要向CA证书机构(例如VerSign、GlobalSign)购买签名证书,从微软网站下载交叉证书,然后使用签名工具SignTool进行签名。
驱动签名证书
从CA证书版本机构购买的驱动签名证书,通常包含一个双证书文件myCert.spc(包含一个CA证书和一个签名证书)以及一个私钥文件myCert.pvk。
然后将得到的证书文件转换为签名工具可以使用的pfx(个人信息交换)格式,可以借助工具Pvk2Pfx:
Pvk2Pfx -pvk myCert.pvk -pi 123456 -spc myCert.spc -pfx myCert.pfx -po 123456
-pvk 指定密钥文件
-spc 指定双证书文件
-pi 保护输入密钥的密码
-pfx 输出的pfx证书文件
-po 保护输出密钥的密码
执行成功后会生成myCert.pfx文件
交叉签名证书
可以从Microsoft网站可以下载相应的交叉证书,交叉证书和驱动签名证书的CA必须是相同的:
http://www.microsoft.com/whdc/driver/install/drvsign/crosscert.mspx;
此处以VerSign签名证书为例下载后的文件为MSCV-VSClass3.cer 。
签名工具
Signtool.exe,签名会使用到该工具的sign命令,以下是该命令常用的参数:
/v 执行成功、执行失败或产生警告消息时生成详细输出。
/a 自动选择最佳的签名证书。
/c 指定用于对证书进行签名的证书模板名(一个 Microsoft 扩展),交叉签名证书。
/f 指定签名证书文件(pfx格式)。
/p 指定签名证书的私钥保护密码。
/t 指定时间戳服务器的 URL。
详细命令和参数参考:http://msdn.microsoft.com/zh-cn/library/8s9b9yaz(VS.80).aspx
驱动文件签名
SignTool sign /v /ac MSCV-VSClass3.cer /f myCert.pfx /p 123456 /t http://timestamp.verisign.com/scripts/timestamp.dll mydrv.sys
The following certificate was selected:
Issued to: My Company Co.,Ltd
Issued by: VeriSign Class 3 Code Signing 2004 CA
Expires: Sat Sep 24 07:59:59 2011
SHA1 hash: 4C59A129D4A09F2FD53B75B79D3C7BE91D832EE7
Cross certificate chain (using machine store):
Issued to: Microsoft Code Verification Root
Issued by: Microsoft Code Verification Root
Expires: Sat Nov 01 21:54:03 2025
SHA1 hash: 8FBE4D070EF8AB1BCCAF2A9D5CCAE7282A2C66B3
Issued to: Class 3 Public Primary Certification Authority
Issued by: Microsoft Code Verification Root
Expires: Tue May 24 01:11:29 2016
SHA1 hash: 58455389CF1D0CD6A08E3CE216F65ADFF7A86408
Issued to: VeriSign Class 3 Code Signing 2004 CA
Issued by: Class 3 Public Primary Certification Authority
Expires: Wed Jul 16 07:59:59 2014
SHA1 hash: 197A4AEBDB25F0170079BB8C73CB2D655E0018A4
Issued to: My Company Co.,Ltd
Issued by: VeriSign Class 3 Code Signing 2004 CA
Expires: Sat Sep 24 07:59:59 2011
SHA1 hash: 4C59A129D4A09F2FD53B75B79D3C7BE91D832EE7
Done Adding Additional Store
Successfully signed and timestamped: mydrv.sys
Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0