Windows内核驱动签名流程

与普通应用程序签名不同,Windows内核驱动程序因其在操作系统核心区域运行且拥有更高权限,Microsoft对其签名要求更为严格。本文详细介绍Windows内核驱动的签名流程和相关要求。

前置条件

完成内核驱动签名需要具备以下必备条件:

  1. EV (Extended Validation) 代码签名证书

    • 必须存储在硬件安全模块(HSM)或USB密钥中
    • 证书有效期一般为1-3年,请确保证书在有效期内
    • 证书PIN码有有效期限制,请注意按时更新
    • 连续输错PIN码达到限制次数(通常为5次)后,证书将被锁定,需使用管理PIN码解锁
    • 必须由Microsoft认可的证书颁发机构(CA)颁发
  2. 签名工具(以下二选一):

    • EV证书服务商提供的签名工具,如WoSign官方的”WoSignCode代码签名精灵”(本文以此为例)
    • Microsoft官方签名工具:SignTool(包含在Windows SDK中)
  3. Windows开发环境

    • Windows 10或更高版本操作系统
    • Visual Studio 2019或更高版本(包含驱动开发包)
    • Windows Driver Kit (WDK),需与Visual Studio版本匹配
    • 推荐安装Windows SDK
  4. 内核驱动源代码

  5. Microsoft硬件开发中心账号

签名流程

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版本上正常安装运行