登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
SignTool 使用 SafeNet eToken 硬证书进行代码签名 ...
SignTool 使用 SafeNet eToken 硬证书进行代码签名
[ 复制链接 ]
羔迪
2025-10-12 15:20:00
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
根据CA/B联盟国际标准要求,从 2022 年 11 月 15 日起,即使是 OV 代码签名证书,也需要将私钥存储在FIPS140-2 Level2、Common Criteria EAL4级以上或者同等认证级别的硬件,如 USB 令牌、硬件安全模块 HSM 等。原本之前只有 EV 证书才有此要求,现在代码签名也需要如此。我司购买的证书刚好最近差不多快过期了,续签的证书从原本的很方便的 PFX 软证书,换成使用带 HSM 硬件设备的硬证书
换成带 HSM 硬件设备的硬证书之后,依然可以使用 SignTool 进行自动化签名。和之前的软证书 PFX 文件只有命令行参数的差别了。本文将记录如何修改 SignTool 签名命令适配硬证书
我所在的团队是从天威诚信购买的证书,没有议价,稍贵。但他们的售后服务还不错,会给一些指导。但天威诚信推荐的是用他们的 iTrusSignTool.exe 工具,而非微软官方提供的 SignTool 工具,不利于我的自动化打包平台接入
好在天威诚信购买的证书使用的是 SafeNet 工具,依然可以从堆栈网找到 SafeNet eToken 的 SignTool 命令行签名方法,整个不会被弹出要求输入密码的对话框。堆栈网上给的是 EV 证书签名,且也没有中文截图。为了防止其他伙伴踩坑,我重新跑了一遍,编写了本文,包含详细的步骤,步骤里包含中文和英文界面的截图。详细堆栈网的地址是: https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken/47894907#47894907
先使用天威诚信供应商提供的口令和安装方法进行安装,这个步骤完成按照他们的文档就可以了,十分简单。唯一需要小心的是,这个过程里面不能使用远程桌面连接,哪怕用向日葵都可以,尽管在打包服务器部署向日葵是十分不安全的
详细配置文档请参阅 天威诚信代码签名证书安装配置指南(Digicert) 代码签名部署文档
如从其他供应商购买,还请自行参阅其他供应商提供的方法。如 https://www.geocerts.com/support/digicert-usb-etoken-installation-guide
完成证书下载任务之后,接下来即可进行本文的步骤了。本文以下步骤里面,我所有写入的我的密码等,都不是我所在团队真正使用的密码,还请大家不用担心我泄露密码,但却都是符合真实格式的内容,便于大家明确了解各个参数应该从哪里拿到
0 首先点击齿轮键进入高级模式,其高级模式界面如下
1 导出证书为 Codesign.cer 文件。右击对应的证书,选择导出,保存到文件即可。导出的 cer 格式的证书文件将不包含私钥,需要使用以下步骤获取 CSP 名和其对应的私钥容器名参数才能让 SignTool 从硬件设备获取私钥用于签名
2 记住证书的容器名。将其记录到记事本里,后续命令将会用到。如我的是 Container name 容器名是 p11#59336aa23069996b
3 获取设备的 CSP 名和读卡器名称
读卡器名称:
CSP 名:
CSP 名和读卡器名称在相同一页,只是内容比较多,需要滚动一下滚动条才能看到。额外地,在菜单栏也提供了复制的按钮,不需要真自己一个个字符抄
如我的读卡器名 reader 为 SafeNet Token JC 0
我的 CSP 名为 eToken Base Cryptographic Provider
4 拼接私钥容器名参数
eToken CSP 具有隐藏(或者至少没有广泛宣传)的功能,可以从容器名称中解析出令牌密码。尽管 https://stackoverflow.com/questions/17927895/automate-extended-validation-ev-code-signing-with-safenet-etoken/47894907#47894907 说明包含四个可选项,但实际我测试了,最稳妥的是最为复杂的写法项
为了让我的博客引擎开森,我将以下代码的两个连在一起的花括号替换为全角的花括号。自己使用的时候,还请替换全角的花括号为半角的花括号
[reader{{password}}]=ContainerName
复制代码
其各个参数含义如下
reader: 读卡器名。第 3 步获取到的,如我的是 SafeNet Token JC 0
password: 下载证书过程中,自己设置的证书密码,如我的是 Lindexi123
ContainerName: 证书的容器名。第 2 步获取的,如我的是 p11#59336aa23069996b
重点说明,以上格式的两个连续花括号是必需的部分,这属于语法的一部分,还请不要省略
拼接之后的私钥容器名参数如下
/k "[SafeNet Token JC 0{{Lindexi123}}]=p11#59336aa23069996b"
复制代码
5 完全的签名参数
按照微软的官方文档,可以知道其核心参数如下
/f : 导出的 Codesign.cer 签名证书文件,此证书文件没有包含私钥。私钥是存放在硬件设备里面。如后续步骤错误,将收到 SignTool Error: No private key is available 错误提示
/csp : 步骤 3 获取的 CSP 名。只有 csp 不配合 /k 参数,则将收到 SignTool Error: The /csp option requires the /k option. 错误
/k : 从步骤 4 拼接到的。等同于 /kc 参数,即写 /k 或 /kc 都可以
非核心的日常参数如下,以下参数相对固定,正常不用更改
/td :将此选项与 /tr 选项一起使用可请求 RFC 3161 时间戳服务器使用的摘要算法。正常现在只能用 /td sha256
/tr :指定 RFC 3161 时间戳服务器的 URL 地址。如用 digi 的服务器 /tr http://timestamp.digicert.com
/fd :指定要用于创建文件签名的文件摘要算法。正常现在只能用 /fd sha256
/as :追加此签名。如果不存在主签名,则改为使此签名成为主签名
以下是我的示例签名命令,对 Test1.exe 文件进行签名
SignTool sign /f "Codesign.cer" /td sha256 /as /fd sha256 /tr http://timestamp.digicert.com /csp "eToken Base Cryptographic Provider" /k "[SafeNet Token JC 0{{Lindexi123}}]=p11#59336aa23069996b" Test1.exe
复制代码
以上签名命令里面,为了让我的博客引擎开森,我将两个连在一起的花括号替换为全角的花括号,还请自行替换为半角花括号。额外地,大家所设置的密码,即 Lindexi123 部分,以及证书的容器名,即 p11#59336aa23069996b 部分,都是和我不相同的,还请大家自行替换为自己的密码和证书的容器名
以上签名命令里面,证书文件写的是相对路径,如遇到证书找不到的问题,还请自行修改为你的正确证书文件路径。证书文件 /f 参数也可传入绝对路径,正常在打包过程中,传入绝对路径更好,避免工作路径干扰
在此过程里面,都需要保持签名设备没有远程桌面 RDP 连接,否则将会签名失败。如签名成功,将会看到大概如下的控制台输出内容
Done Adding Additional Store
Successfully signed: Test1.exe
复制代码
签名成功之后,右击被签名的文件的属性,可以从数字签名界面看到签名内容。大家可以先尝试命令行参数,确定能够正常签名之后,再接入到自己的打包平台里面。对每个文件的签名,也只有传入的文件路径不相同而已,其他参数都是一样的,换句话说只要自己能拼接出一次正确的命令参数,接下来的其他文件的签名都可以复用这些参数
参考文档
Digicert代码签名证书助手操作指南 代码签名部署文档
天威诚信代码签名证书安装配置指南(Digicert) 代码签名部署文档
https://www.gworg.com/code/1627.html
使用 SignTool 对文件进行签名 - Win32 apps Microsoft Learn
SignTool - Win32 apps - Microsoft Learn
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
SignTool
使用
SafeNet
eToken
证书
相关帖子
nordic nrf5340使用笔记
PaddlePaddle RapidOcr 使用一则
一步一步学习使用FireMonkey动画(4) 使用Delphi的基本动画组件类
OpenCVSharp:使用CaffeModel
Nuxt.js v4中使用quill富文本组件
Obsidian的Bases数据库入门教程,使用数据库实现Todo待办管理系统
使用typora来写md文件时配置文件存放图片的路径
如何使用 vxe-gantt table 甘特图来实现多个维度视图展示
js框架使用
使用ai的方法给epub文件中的汉字加拼音
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
nordic nrf5340使用笔记
0
905
表弊捞
2025-12-02
安全
PaddlePaddle RapidOcr 使用一则
0
587
粉押淫
2025-12-02
业界
一步一步学习使用FireMonkey动画(4) 使用Delphi的基本动画组件类
1
768
崔瑜然
2025-12-03
业界
OpenCVSharp:使用CaffeModel
0
213
渭茱瀑
2025-12-03
业界
Nuxt.js v4中使用quill富文本组件
1
299
汲佩杉
2025-12-04
业界
Obsidian的Bases数据库入门教程,使用数据库实现Todo待办管理系统
0
391
焦尔蕾
2025-12-06
业界
使用typora来写md文件时配置文件存放图片的路径
0
712
董绣梓
2025-12-06
代码
如何使用 vxe-gantt table 甘特图来实现多个维度视图展示
0
455
馏栩梓
2025-12-07
代码
js框架使用
0
14
新程序
2025-12-07
业界
使用ai的方法给epub文件中的汉字加拼音
0
215
叶芷雁
2025-12-08
回复
(4)
那虻
2025-10-13 13:18:50
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
姥恫
2025-10-16 07:01:00
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
命煦砌
4 天前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
唐茗
1 小时前
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
用心讨论,共获提升!
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
科技
签约作者
程序园优秀签约作者
发帖
羔迪
1 小时前
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
anyue1937
9994893
kk14977
6845356
3934307807
991122
4
xiangqian
638210
5
宋子
9987
6
闰咄阅
9991
7
刎唇
9993
8
俞瑛瑶
9998
9
蓬森莉
9952
10
匝抽
9986
查看更多