代码签名证书的安装方式与SSL证书不同。没有文件需要放到服务器上。私钥必须在经过认证的硬件设备内部生成,并在证书的整个生命周期内一直保留在该设备中,这一点改变了后续每一步的顺序:结账时你选择什么,你必须向证书颁发机构发送什么,验证结束后会收到什么,以及最终签名时你要输入什么。
本系列教程涵盖了SSL Dragon销售的证书所需经历的每一个阶段。使用本页面来确定你目前所处的阶段,并核对无论使用哪个证书颁发机构或设备都适用的少数几条规则。
快速导航
- 应该选择哪种代码签名证书交付方式?
- YubiKey 5 FIPS CSR生成与证明
- Luna Network HSM 7:CSR与证明指南
- 如何验证Sectigo和Comodo代码签名证书
- 如何验证DigiCert和GoGetSSL代码签名证书
- 如何在已寄送的令牌上设置EV代码签名证书
- YubiKey 5 FIPS代码签名证书安装
- 如何使用代码签名证书对EXE文件进行签名
当前所有代码签名证书都要遵循的规则
下面这八份指南背后有三项行业层面的变化。先了解这些变化,你就会明白为什么整个流程是这样设计的,也能避免按照仍在广泛流传的旧说明操作。
私钥必须在经过认证的硬件中生成并保存
自2023年6月1日起,CA/Browser Forum的《代码签名基准要求》规定,私钥必须由至少达到FIPS 140-2 Level 2或Common Criteria EAL 4+认证标准的加密模块来保护。证书颁发机构不能再允许你在浏览器或笔记本电脑上生成密钥,然后下载一个PFX文件了事。
其他一切规则都源自这一条。这就是为什么订购表单会要求你选择交付方式,为什么会存在证明文件(这是你向CA证明——CA从未亲眼见过某个密钥被创建,但该密钥确实是在合规硬件内部创建的——的方式),也是为什么安装证书意味着将其放入设备上的插槽,而不是导入到服务器中。
证书有效期现在以月计,而非以年计
CA/Browser Forum于2025年11月17日通过的CSC-31提案(作为《代码签名基准要求》第3.10.0版)将公开信任的代码签名证书的最长有效期,从39个月缩短为460天,适用于2026年3月1日及以后签发的证书。该规定同样适用于标准验证证书和扩展验证证书。
两家CA都提前做出了调整,并且都将有效期定为459天,约十五个月:Sectigo从2026年2月23日起,DigiCert从2026年2月24日起。DigiCert同时取消了两年期和三年期选项。任何仍向你提供三年期代码签名证书的指南(包括这些页面的旧版本),所描述的产品实际上已经不存在了。多年期购买现在意味着通过重新签发来实现多年覆盖,而不是一份长期有效的单一证书。有效期缩短也意味着为每次签名添加时间戳不再是可选项,因为时间戳正是让你已经发布的软件在证书过期后仍保持有效的关键。
扩展验证不再能绕过SmartScreen
过去,EV代码签名证书可以让全新的应用程序跳过Microsoft Defender SmartScreen的警告。这一行为在2024年8月被取消,当时EV代码签名对象标识符被从Microsoft Trusted Root Program的根证书中移除。现在,Windows对所有代码签名证书一视同仁,EV签名文件积累信誉的方式与OV签名文件完全相同。
EV仍然意味着对你的组织进行更严格的审核,一些企业采购规则仍会要求使用它,所以它并没有失去价值。只是它不再能立即换来Windows的信任,这些页面中的任何签名流程都无法改变这一点。
阶段一:选择或确认你的交付方式
这是第一个决定,也是唯一一个之后无法重新更改的决定。它决定了CA会向你寄送硬件,还是要求你自备硬件,因此也决定了以下哪些指南适用于你。
应该选择哪种代码签名证书交付方式?
对比订购表单上的两种选项——CA预先加载并寄送的令牌,与你已经拥有的硬件——包括各CA目前的运费、Sectigo和DigiCert目前实际接受的设备、CA运营的云签名服务有哪些不同之处,以及为什么这一选择在结账时就已锁定。请在下单前阅读本文:它还列出了值得提前确认的问题,例如你的设备是否在CA支持的列表中,以及它是否真的能够生成证明文件。如果订单已经存在,本文也说明了此时哪些内容可以更改,哪些不能。
阶段二:在自己的硬件内生成密钥和CSR
如果CA将向你寄送预先加载好的令牌,可以跳过此阶段,因为密钥在设备寄出之前就已为你生成好。此阶段仅适用于你选择使用自己已有硬件的情况,在这种情况下,CA在收到你在该设备上生成的CSR以及一份证明该密钥确实在该设备内创建且无法导出的证明文件之前,无法签发任何证书。
在你开始操作YubiKey之前先提醒一句:许多旧说明所依赖的YubiKey Manager图形界面已于2026年2月19日终止支持。ykman命令行工具和Yubico Authenticator不受影响,以下指南使用的正是这两者。
YubiKey 5 FIPS CSR生成与证明
在YubiKey 5 FIPS上完整的ykman操作流程:首先将令牌切换到FIPS批准模式(否则它会拒绝生成密钥),选择插槽和密钥算法,生成密钥对和CSR,导出证明证书和Yubico中间证书,并将它们合并成CA所要求的单个PEM文件。本文还讲解了一个PowerShell编码陷阱,它会导致本应正确的证明文件被拒绝。
Luna Network HSM 7:CSR与证明指南
在Thales Luna Network HSM上完成同样的工作,使用Luna HSM Client中的独立cmu工具:生成证明所依赖的具有相应属性的RSA密钥对,读取对象句柄,使用正确的签名算法构建CSR,并生成CA将验证的公钥确认信息。即使你以前执行过这些命令,也值得一读,因为行业内广泛流传的版本在你未添加某个选项的情况下,会生成SHA-1签名的CSR。
阶段三:通过验证
验证考察的是你的身份,而不是你的硬件,因此它与阶段一和阶段二同步进行,而不是在它们之后才进行。CA会确认证书中所列实体在法律上是否真实存在,是否可以通过CA能够从订购表单之外的来源核实的地址、电话号码或电子邮箱联系到该实体,以及批准该请求的人是否获得授权。这是几乎所有延迟订单卡住的环节,也是唯一一个你自己无法靠加快速度来加速的阶段。
两家CA采用的流程不同,请选择与你的证书相匹配的指南。
如何验证Sectigo和Comodo代码签名证书
Sectigo对组织验证证书、无公司的个人开发者以及扩展验证证书分别检查哪些内容,以及检查顺序:对你法定名称的注册机构核查、自动化的视频身份验证会话、地址和联系方式核实、订户协议、结束订单的回访电话,以及EV额外要求的运营存在性核查和二次审核步骤。本文还解释了为什么Sectigo订单中会出现Comodo品牌的文件,以及当政府注册机构信息本身不足以完成验证时该怎么办。
如何验证DigiCert和GoGetSSL代码签名证书
DigiCert针对CS和EV CS证书的流程,包括绝大多数订单会卡住的关键点:必须同时完成两件事——组织必须完成代码签名验证,并且必须有一名针对该证书类型标记为已验证的联系人批准该请求——订单会一直处于待处理状态,直到两者都完成为止。本文涵盖组织、地址和电话验证,确认电话,没有注册公司的个人开发者的申请路径,以及订单卡住时该怎么办。
阶段四:将证书部署到你的硬件上
验证通过后,证书即被签发。接下来会发生什么,取决于你在阶段一选择的交付方式。要么会收到一个邮寄来的令牌,密钥和证书已经预装在其中;要么会收到一个证书文件,需要将其导入到生成了你CSR的那台设备中。
如何在已寄送的令牌上设置EV代码签名证书
适用于CA寄送给你的令牌的操作流程,这也是EV订单通常的交付方式。内容包括安装SafeNet Authentication Client、客户端与令牌需要按怎样的顺序连接、更改CA通过邮件发给你的初始令牌密码、确认Windows能够识别该证书,以及找到签名工具所需的指纹信息。请在输入密码之前先阅读锁定相关的部分:令牌在少数几次密码输错后就会被锁定,而能够解锁的管理员密码掌握在CA手中。
YubiKey 5 FIPS代码签名证书安装
将已签发的证书导入到生成你CSR的密钥对所在的YubiKey插槽中,可以使用ykman或Yubico Authenticator,内容还包括如何验证结果,以及当CA发来的PKCS#7文件无法被工具读取时该怎么办。本文还澄清了旧指南中常见的两个错误:导入操作实际要求输入的是哪种凭证,以及Sectigo中间证书究竟需要放在什么位置,才能让你的签名正确形成证书链。
阶段五:对代码进行签名并验证
最后一个阶段是你每次发布新版本时都需要重复的操作,因此值得一次性把命令写对并将其脚本化。
如何使用代码签名证书对EXE文件进行签名
在无需猜测版本号的情况下,在Windows SDK中找到SignTool;使用SHA-256摘要和RFC 3161时间戳进行签名的命令;在包含多个证书的机器上选择正确的证书;标准的验证检查方法,以及为什么不使用正确的开关就会验证失败;还有如何从云端密钥或CI/CD流水线进行签名。本文还涵盖了Microsoft目前针对非Store分发方式推荐的无需令牌的方案,以及签名对SmartScreen究竟能起到什么作用、又不能起到什么作用。

