与普通应用程序签名不同,Windows内核驱动程序因其在操作系统核心区域运行且拥有更高权限,Microsoft对其签名要求更为严格。本文详细介绍Windows内核驱动的签名流程和相关要求。
前置条件
完成内核驱动签名需要具备以下必备条件:
EV (Extended Validation) 代码签名证书
- 必须存储在硬件安全模块(HSM)或USB密钥中
- 证书有效期一般为1-3年,请确保证书在有效期内
- 证书PIN码有有效期限制,请注意按时更新
- 连续输错PIN码达到限制次数(通常为5次)后,证书将被锁定,需使用管理PIN码解锁
- 必须由Microsoft认可的证书颁发机构(CA)颁发
签名工具(以下二选一):
- EV证书服务商提供的签名工具,如WoSign官方的”WoSignCode代码签名精灵”(本文以此为例)
- Microsoft官方签名工具:SignTool(包含在Windows SDK中)
Windows开发环境
- Windows 10或更高版本操作系统
- Visual Studio 2019或更高版本(包含驱动开发包)
- Windows Driver Kit (WDK),需与Visual Studio版本匹配
- 推荐安装Windows SDK
内核驱动源代码
Microsoft硬件开发中心账号
- 需在Microsoft合作伙伴中心注册账号
- 用于提交驱动进行WHQL认证或attestation签名
签名流程
1. EV证书验证
- 登录Microsoft硬件开发中心,创建新的驱动程序提交
- 从平台下载需要签名的
Signable.cab
文件(包含验证文件) - 使用签名工具(如WoSignCode代码签名精灵)对验证文件进行签名:
1
2# 如使用SignTool示例
SignTool sign /v /ac "CrossCertificateFile.cer" /n "Your Subject Name" /t http://timestamp.digicert.com /fd sha256 Signable.cab - 上传签名后的文件回Microsoft硬件开发中心,验证EV证书有效性
- 验证通过后,才能继续后续步骤
2. 编译内核驱动
- 在Visual Studio中配置项目属性,确保驱动目标平台正确
- 选择目标架构(x64、x86、ARM64等)
- 选择适当的驱动模型(KMDF、UMDF或WDM)
- 设置正确的驱动目标最低操作系统版本
- 编译后将生成如下文件:
.inf
: 驱动安装信息文件.sys
: 驱动程序二进制文件.cat
: 安全目录文件(包含签名).pdb
: 程序调试数据库文件
3. 驱动打包与签名
准备驱动包
- 编写
.ddf
文件(定义要包含在CAB文件中的文件及其目标位置) - 示例
.ddf
内容:1
2
3
4
5
6
7
8
9
10
11
12.OPTION EXPLICIT ; Generate errors
.Set CabinetNameTemplate=Driver.cab
.Set DiskDirectoryTemplate=CDROM ; All cabinets go in a single directory
.Set CompressionType=MSZIP ; Type of compression
.Set Cabinet=on ; Put files in cabinet
.Set Compress=on ; Compress files
; 包含所有需要的驱动文件
driver.inf
driver.sys
driver.cat
driver.pdb
- 编写
生成CAB文件
- 使用
MakeCab
命令根据.ddf
文件生成CAB包:1
makecab /f driverfiles.ddf
- 使用
对CAB包进行签名
- 使用EV证书对CAB文件进行签名
- 如使用WoSignCode工具,按UI指引操作
- 如使用SignTool:
1
SignTool sign /v /ac "CrossCertificateFile.cer" /n "Your Subject Name" /t http://timestamp.digicert.com /fd sha256 Driver.cab
4. 提交至Microsoft进行认证
- 登录Microsoft硬件开发中心
- 创建新的提交,上传已签名的CAB文件
- 选择适当的认证类型:
- WHQL认证:完整测试,获得”Windows认证”徽标
- Attestation签名:简化流程,仅提供兼容性签名
- 填写驱动详细信息,包括支持的操作系统版本、体系结构等
- 提交后等待Microsoft审核
- 如果提交被拒绝,根据审核日志修改问题并重新提交
5. 获取签名后的驱动程序
- 审核通过后,从Microsoft硬件开发中心下载已签名的驱动包
- 签名后的驱动将包含Microsoft的交叉证书,可在所有支持的Windows版本上正常安装运行