Certum 线下 QES 身份核验点 · 郑州免费预约远程视频核验
SSLDUN®数字证书服务·SSL盾SSL CERTIFICATE SERVICE
证书使用深度解读约 14 分钟阅读

signtool签名hlkx失败怎么办?

Certum OV代码签名 800元/年QES电子签名 个人QESig 地图标注
要点速览

signtool 报错:无法识别格式 根本原因:signtool.exe 不支持直接签名 .hlkx 文件 hlkx 是 OPC 开放打包格式(zip‑xml 容器),使用 XML‑DSIG 包内签名,不是 Authenticode 签名;signtool 只处理 exe/dll/cat 这类PE

signtool 报错:无法识别格式

 

根本原因:signtool.exe 不支持直接签名 .hlkx 文件 

 

hlkx 是 OPC 开放打包格式(zip‑xml 容器),使用 XML‑DSIG 包内签名,不是 Authenticode 签名;signtool 只处理 exe/dll/cat 这类PE Authenticode文件,所以直接丢hlkx进去必然报无法识别格式 。

 

 错误做法:signtool sign xxx.hlkx(网上部分文档是错误的)

 

三种正确签名hlkx方案(WHQL提交)

 

方案1:HLK‑Studio内签名(官方原生,U‑Key本地EV证书)

 

1. HLK Studio打开项目 → Create Submission

2. 签名选项选择本机已安装的EV代码签名证书(Certum EV)

3. 内部完成OPC包签名,输出已签名hlkx包

 

缺点:云端Keylocker(Certum无U‑key)证书,HLK Studio原生不识别,无法用此方式 

globalsign、digicert等ukey存储证书的品牌适用此方式。

 

方案2:开源工具 OpenOpcSignTool / HlkSigner(适配certum云端HSM/Keylocker,最常用)

 

专门给OPC‑hlkx做XML数字签名,支持AzureSignTool、Certum Keylocker云端EV证书,替代signtool处理hlkx 。

 

powershell

  

# OpenOpcSignTool示例,对接云端EV

OpenOpcSignTool sign --input test.hlkx --output test_signed.hlkx --azure-sign ...

 

 

关键点:sys/cat驱动二进制文件,仍然要用signtool先做Authenticode SHA256+RFC3161时间戳签名,再打包生成hlkx;hlkx只是测试报告包。

 

方案3:不本地签hlkx,裸hlkx直接上传微软硬件仪表板(最省事)

 

- 把未签名hlkx上传微软硬件开发者后台

- 后台会使用已经绑定账号的EV证书完成hlkx签名(Attest提交模式)

 

条件:EV证书指纹已经录入微软硬件账号;驱动sys/cat本地必须signtool签好SHA256+时间戳。

该方式是国内使用Certum Keylocker云端EV最省事路径。

 

完整正确WHQL流程(Certum Keylocker云端EV)

 

1. 驱动sys、cat文件:signtool(AzureSignTool)签名 SHA256 + RFC3161时间戳 (这一步signtool干)

2. HLK跑完全部测试,导出未签名hlkx

3. 路径A:未签名hlkx直接上传微软硬件仪表板,后台代签(推荐,Keylocker可选方案)

4. 路径B:本地OpenOpcSignTool调用Keylocker对hlkx做OPC签名,之后上传

 

高频踩坑点

 

1. 使用signtool直接签名hlkx → 报无法识别格式(你遇到的报错)

2. 混淆:signtool只管驱动二进制,不管hlkx报告包

3. Certum Keylocker云端EV:HLK Studio图形界面无法读取云端密钥,不能用Studio内签名,只能选方案3上传代签或者OpenOpcSignTool工具。

4. 驱动sys/cat如果没提前signtool签名,即便hlkx签好,微软后台直接驳回。

 

快速校验排查

 

1. 先拿signtool签名一个exe,确认你的EV证书(Keylocker/AzureSignTool)本身工作正常。

2. hlkx改后缀zip解压,看内部文件是否完整,排除hlkx包损坏。

3. 确认EV证书SHA1指纹已经录入微软硬件开发者中心账号。

 

OpenOpcSignTool对接Certum Keylocker的实操命令模板

OpenOpcSignTool(OpenVsixSignTool)对接 Certum SimplySign‑Keylocker 签名 hlkx

 

前提:SimplySign Desktop 必须后台登录运行,证书已经加载进本机 Windows 证书存储(Current‑UserMy),工具读取证书存储里的云端EV证书,私钥实际在Certum HSM云端,本机只存公钥与证书上下文。

工具原名: OpenVsixSignTool ,就是 OpenOpcSignTool,dotnet 全局工具 。

 

1、安装工具(Windows,需要.NET6+)

 

powershell

  

dotnet tool install -g OpenVsixSignTool

 

 

安装完直接在PowerShell/CMD调用  OpenVsixSignTool 

 

2、命令模板(本地证书存储模式‑Certum SimplySign)

 

powershell

  

OpenVsixSignTool sign ^

--sha1 "你的EV证书SHA1指纹大写去掉空格" ^

--input "D:hlk est.hlkx" ^

--output "D:hlk est_signed.hlkx" ^

--timestamp http://time.certum.pl ^

-fd sha256 ^

-ta sha256 ^

-v

 

 

参数说明

 

-  --sha1 :EV证书SHA1指纹,SimplySign Desktop里复制,全部大写,无空格

-  --input :HLK Studio导出未签名hlkx

-  --output :输出签名后的hlkx

-  --timestamp :Certum时间戳  http://time.certum.pl ,必须带,防止证书过期签名失效

-  -fd sha256 :包内摘要算法,微软强制

-  -ta sha256 :时间戳摘要算法

-  -v :verbose输出排错

 

限制:必须保持 SimplySign Desktop 登录驻留后台,签名操作会触发SimplySign弹窗TOTP二次确认(手机SimplySign App确认),无法完全无交互headless,CI自动化很难跑通。

 

3、对比方案:HLKSigner(备选工具,github tracenyx/hlksigner)

 

专门针对hlkx,OPC‑XML‑DSIG签名,但是它原生只对接Azure Key‑Vault,不能直接对接Certum SimplySign Keylocker,不适合你的环境。

 

最推荐 Certum Keylocker 的实际生产方案(绕开本地hlkx签名坑)

 

不本地签hlkx,这是Certum云端EV最稳路径:

 

1. signtool(配合SimplySign Desktop)先签好 sys/cat驱动二进制 SHA256+时间戳 

2. HLK跑测试,导出未签名hlkx

3. 直接上传微软硬件仪表板,后台Attest模式自动完成hlkx签名;前提EV证书SHA1指纹已经录入微软硬件开发者账号

 

好处:不需要OpenVsixSignTool、不需要TOTP弹窗、无工具兼容坑,国内绝大多数Certum‑Keylocker用户走这条。

 

常见报错排查

 

1.  Cannot find certificate :确认SimplySign Desktop已登录;证书出现在  certmgr.msc → 当前用户‑个人 ;指纹大小写完全一致。

2. 签名时卡住无响应:SimplySign App需要手动点确认签名请求,不要锁屏。

3. 上传微软后台报签名无效:检查时间戳服务器网络;必须使用  http://time.certum.pl ;确认驱动sys/cat提前已经Authenticode签名。

 

完整bat批处理模板:先signtool批量签sys/cat,再OpenVsixSignTool签hlkx

完整批处理模板(bat)

 

环境要求

 

1. 已安装 SimplySign Desktop,保持登录状态

2. 已安装 OpenVsixSignTool(dotnet global tool)

3. signtool 在系统PATH,或者填写完整路径

4. .NET 6 或更高版本

5. 修改脚本内:证书SHA1指纹、文件路径

 

batch

  

@echo off

chcp 65001

setlocal enabledelayedexpansion


:: ======================配置区,请修改这里======================

set "CERT_SHA1=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

set "TIMESTAMP_URL=http://time.certum.pl"

:: 驱动目录,存放 sys cat

set "DRIVER_FOLDER=D:hlkdriver"

:: hlkx源文件与输出文件

set "HLKX_INPUT=D:hlk est.hlkx"

set "HLKX_OUTPUT=D:hlk est_signed.hlkx"

:: =============================================================


echo.

echo ==========第一步:对目录下所有 sys cat 执行 Authenticode签名==========

for %%f in ("%DRIVER_FOLDER%*.sys","%DRIVER_FOLDER%*.cat") do (

    echo 正在签名 %%~nxf

    signtool sign ^

    /sha1 %CERT_SHA1% ^

    /fd sha256 ^

    /tr %TIMESTAMP_URL% ^

    /td sha256 ^

    /v "%%f"

    if !errorlevel! neq 0 (

        echo ERROR:%%~nxf 签名失败

        pause

        exit /b !errorlevel!

    )

)


echo.

echo ==========第二步:OpenVsixSignTool 签名 hlkx OPC包==========

OpenVsixSignTool sign ^

--sha1 "%CERT_SHA1%" ^

--input "%HLKX_INPUT%" ^

--output "%HLKX_OUTPUT%" ^

--timestamp "%TIMESTAMP_URL%" ^

-fd sha256 ^

-ta sha256 ^

-v


if %errorlevel% equ 0 (

    echo.

    echo ======================================

    echo 全部完成!输出文件:%HLKX_OUTPUT%

    echo 注意:签名hlkx会弹出SimplySign手机TOTP确认

    echo ======================================

) else (

    echo hlkx签名执行失败

)

pause

 

 

使用要点

 

1. 把上述内容保存为  SignDriverHlkx.bat 

2. 修改配置区4项参数:证书SHA1指纹、路径

3. 运行bat前:SimplySign Desktop必须登录;手机SimplySign App待命,hlkx签名环节会推送确认请求,需要手动点确认,无法静默自动化。

4. signtool报错找不到证书:打开  certmgr.msc  → 当前用户‑个人,确认EV证书存在。

 

生产环境强烈提醒

 

Certum Keylocker场景,优先推荐不本地签hlkx

sys/cat本地signtool签好 → 导出未签名hlkx → 直接上传微软硬件仪表板,后台Attest代签hlkx。

可以规避OpenVsixSignTool依赖、TOTP弹窗、工具版本兼容、网络时间戳异常一堆问题。

 

验证签名是否有效

 

1)验证sys/cat

 

batch

  

signtool verify /pa /v xxx.sys

 

 

查看:有签名、时间戳正常、算法sha256。

 

2)验证hlkx

 

OpenVsixSignTool自带校验命令

 

powershell

  

OpenVsixSignTool verify --input D:hlk est_signed.hlkx -v

 

 

常见坑

 

1. 执行到hlkx步骤卡住:手机没有点SimplySign签名确认;电脑锁屏会中断请求。

2. 时间戳访问失败:国内网络访问  time.certum.pl  偶尔丢包,可切换网络重试。

3. 不要用signtool去打开/校验hlkx,它不认OPC包格式。

证书使用SSL证书数字证书