证书产品Code Signing · CSBR · Authenticode

代码签名证书(Code Signing)

代码签名证书是由证书颁发机构(CA)在核验软件发布者身份后签发的数字证书,开发者用它对应的私钥为可执行程序、安装包、驱动、脚本与宏添加数字签名。用户安装或运行软件时,操作系统通过签名确认软件来自哪个发布者、发布后是否被篡改,Windows 会显示经过验证的发布者名称,而不是“未知发布者”。自 2023 年 6 月 1 日起,CA/浏览器论坛《代码签名基线要求》规定所有代码签名证书的私钥必须存放在硬件令牌、HSM 或等效的云签名服务中。

更新于 EncryptionSign 证书技术团队首次发布

  • OV / EV
  • 个人与组织
  • 硬件保护私钥
  • RFC 3161 时间戳
  • Windows · Java · Office 宏

代码签名证书要点速览

一句话回答:代码签名证书用于为 Windows 程序、驱动、Java 包与 Office 宏签名,让用户看到经过 CA 验证的发布者名称,并确认代码未被篡改。个人开发者与一般商业软件选 OV 代码签名即可;需要提交 Windows 内核驱动,或需要最严格审核的企业身份,选 EV(仅限组织)。证书私钥必须存放在硬件令牌、HSM 或云签名服务中,每次签名都应加时间戳。

  • 作用:证明软件发布者身份与代码完整性,签名后的程序被改动即验证失败。
  • 硬件要求:2023 年 6 月 1 日起,所有代码签名证书(含 OV)的私钥须在 FIPS 140-2 Level 2 / Common Criteria EAL4+ 硬件或等效云签名服务中生成与保存。
  • 有效期:2026 年起单张代码签名证书最长 460 天(约 15 个月)。
  • 时间戳:签名时附加 RFC 3161 时间戳,证书过期后已签名的程序仍可正常验证。
  • EV 用途:EV 代码签名只面向组织,是通过微软合作伙伴中心提交 Windows 内核驱动的前提。
  • 不适用:macOS / iOS 应用须使用 Apple 签发的开发者证书,Android APK 使用开发者自签名密钥。

代码签名证书是什么?代码签名如何工作?

代码签名(Code Signing)是用公钥密码学为软件附加“发布者身份 + 完整性”证明的技术。代码签名证书是其中的身份凭证:CA 核验申请者(个人或组织)的真实身份后,签发一张写有发布者名称与公钥、扩展密钥用法为 codeSigning 的 X.509 证书。开发者用与之对应的私钥签名软件,用户的操作系统再用证书中的公钥验证签名。在 Windows 中,这套机制称为 Authenticode。

签名与验证的过程

  1. 计算哈希:签名工具(如 Windows SDK 中的 signtool)对程序文件计算哈希值,当前应使用 SHA-256;
  2. 私钥签名:用存放在 USB 令牌、HSM 或云签名服务中的私钥对哈希值签名,私钥本身始终不离开硬件;
  3. 嵌入签名与证书链:签名值、代码签名证书与中间证书一起写入文件,Authenticode 签名直接嵌入 .exe、.dll、.msi 等文件中;
  4. 加时间戳:签名工具把签名值的哈希发送给 CA 的 RFC 3161 时间戳服务器,取回由时间戳机构签名的“签名时间”证明,并一同嵌入文件;
  5. 用户端验证:用户运行程序时,系统重新计算哈希并与签名比对,沿证书链验证到受信任的根证书并检查吊销状态,通过后在用户账户控制(UAC)提示中显示“已验证的发布者”。

代码签名能证明什么,不能证明什么

  • 能证明:软件由证书中写明的发布者签名;签名之后文件没有被修改,包括被植入恶意代码、被捆绑或在下载途中被篡改;
  • 不能证明:软件本身是安全的、没有漏洞或恶意功能。CA 只核验发布者身份,不审查代码内容。如果签名私钥被盗并用于签名恶意软件,CA 会吊销该证书。

因此,代码签名的价值来自可追溯的身份:每一个签名都能追溯到经过 CA 核验的个人或组织。这也是 Windows、杀毒软件与企业安全策略普遍把“是否有有效签名、由谁签名”作为信任判断依据之一的原因。

为什么一定要加时间戳?

没有时间戳的签名,其有效性取决于“验证时证书是否仍然有效”:证书一过期,所有未加时间戳的程序都会显示签名无效。加了 RFC 3161 时间戳后,系统改为检查“签名时证书是否有效”,只要签名发生在证书有效期内且证书没有因此被吊销,程序在证书过期多年后仍能正常验证。在单张证书最长 460 天的情况下,时间戳几乎是必选项。公共 CA 普遍提供免费的 RFC 3161 时间戳服务,地址见各 CA 的签名指南。

常用代码签名命令示例
用途命令示例说明
签名 Windows 程序signtool sign /fd sha256 /tr <时间戳地址> /td sha256 /a MyApp.exe/fd 指定文件摘要算法,/tr 指定 RFC 3161 时间戳服务器,/td 指定时间戳摘要算法,/a 自动选择可用的签名证书
验证 Windows 签名signtool verify /pa /v MyApp.exe按 Authenticode 策略验证签名、证书链与时间戳,并输出详细信息
签名 PowerShell 脚本Set-AuthenticodeSignature可通过 -TimestampServer 参数添加时间戳
签名 Java 包jarsigner -tsa <时间戳地址> app.jar <别名>使用硬件令牌时需通过 PKCS#11 方式访问密钥,配置以 CA 指南为准
OV vs EV

OV 与 EV 代码签名证书有什么区别?

代码签名证书按身份验证强度分为 OV 与 EV 两级,OV 可由个人或组织申请。三者的签名算法与强度相同,差别在于验证内容、证书中显示的发布者以及可用的场景。

OV 与 EV 代码签名证书对比
对比项OV 代码签名(个人)OV 代码签名(组织)EV 代码签名
申请主体个人开发者(自然人)依法注册的企业或机构依法注册且正常存续的组织,不接受个人
验证内容个人身份证件等,核验方式以 CA 为准组织合法存在、地址与电话、申请人授权按 EV 标准核验法律存在、实际经营、运营存续与申请人授权
证书中显示的发布者个人姓名组织名称组织名称,以及注册号、注册地等信息
私钥存储硬件令牌 / HSM / 云签名硬件令牌 / HSM / 云签名硬件令牌 / HSM / 云签名
Windows 内核驱动提交不可用不可用合作伙伴中心提交的前提
SmartScreen 信誉需随下载与使用逐步积累需随下载与使用逐步积累不再保证立即消除提示,仍需积累
适合独立开发者、开源作者企业软件、工具与内部程序发布驱动厂商、大型软件发行商、安全与金融软件
组织验证(OV / EV)的审核内容与 OV SSL 证书、EV SSL 证书基本一致:CA 会核验营业执照、在第三方数据库中查询组织信息并进行电话回访。EV 审核更严格,证书中的组织信息也更完整。

代码签名证书有哪些硬性规则?

公共信任的代码签名证书受 CA/浏览器论坛《代码签名基线要求》(Baseline Requirements for the Issuance and Management of Publicly-Trusted Code Signing Certificates,简称 CSBR)约束。2023 年以来,私钥必须硬件保护与证书有效期缩短,是对开发者影响最大的两项变化。

代码签名证书关键规则
规则要求生效时间对开发者的影响
私钥硬件存储私钥须在 FIPS 140-2 Level 2 或 Common Criteria EAL4+ 认证的硬件(USB 令牌、HSM)或等效云签名服务中生成并保存,不可导出2023-06-01 起,含 OV不能再下载 .pfx 文件;签名时需插入令牌或调用云签名服务
最长有效期单张代码签名证书最长 460 天(约 15 个月)2026 年起多年期服务需在期内重新签发证书并更新签名环境
时间戳签名时附加 RFC 3161 时间戳,公共 CA 普遍提供免费时间戳服务—不加时间戳的签名在证书过期后失效
签名哈希算法使用 SHA-256 及以上,SHA-1 已被各大平台弃用—老旧构建工具链需升级
密钥算法常见为 RSA 3072 位及以上,或 ECC P-256 / P-384以 CA 要求为准硬件令牌或 HSM 需支持所选算法
吊销私钥泄露或证书被用于签名恶意软件时,CA 将吊销证书—系统不再信任吊销生效时点之后的签名,已分发的程序可能需要重新签名

私钥交付方式:USB 令牌、HSM 还是云签名?

硬件存储要求生效后,代码签名证书不再以文件形式交付。根据团队规模与签名频率,可以选择三种方式:

代码签名私钥交付方式对比
方式工作方式优点适合
USB 硬件令牌CA 寄送经过认证的 USB 令牌,私钥在令牌内生成;签名时将令牌插入电脑并输入 PIN成本低,私钥物理隔离个人开发者、签名频率较低的团队
企业自有 HSM在符合要求的 HSM(含部分云 HSM)中生成密钥,并向 CA 提供密钥证明(key attestation)与企业现有密钥管理体系集成已部署 HSM 的大型企业
云签名服务私钥保存在 CA 的云端 HSM,通过客户端工具或 API 远程签名,如 DigiCert KeyLocker、Certum SimplySign无需寄送硬件,适合多人协作与自动化构建CI/CD 流水线、分布式开发团队

SmartScreen 提示为什么还在?

Microsoft Defender SmartScreen 会根据文件与发布者的信誉决定是否显示“Windows 已保护你的电脑”。代码签名让信誉可以累积到发布者身份上,但新证书、新发布者在下载量不足时仍可能触发提示。微软已调整 SmartScreen,EV 证书不再保证立即消除提示,信誉仍需积累。建议用同一发布者身份持续签名所有版本、通过官网等正规渠道分发,并避免频繁更换签名主体。

常见错误

  • 忘记加时间戳:证书一过期,已发布的程序全部显示签名无效,只能重新签名并重新发布;
  • 多人共用签名令牌:令牌和 PIN 在团队中随意传递,或长期插在联网的构建机上,一旦被滥用签名恶意程序,证书会被吊销,影响所有已发布的软件;
  • 签名时机不当:先签名再修改文件(例如再次打包、写入资源),会导致签名失效,签名应放在构建的最后一步;
  • 平台用错证书:用公共 CA 代码签名证书去签 macOS 或 Android 应用,这些平台使用各自的签名体系。
Platforms

代码签名证书支持哪些平台与文件格式?

公共 CA 签发的代码签名证书主要用于 Windows 生态、Java 与 Microsoft Office 宏;苹果与安卓平台使用各自独立的签名体系,不使用公共 CA 的代码签名证书。

代码签名平台与文件格式支持
平台 / 文件类型签名工具能否使用公共 CA 代码签名证书说明
Windows 程序:.exe、.dllsigntool(Windows SDK)可以Authenticode 签名,UAC 中显示已验证的发布者
Windows 安装包:.msi、.cabsigntool可以安装包签名后,下载与安装环节都能校验完整性
Windows 内核驱动:.sys微软合作伙伴中心需 EV 证书Windows 10 起,新的内核模式驱动通常须提交微软合作伙伴中心由微软签名,提交账户需使用 EV 代码签名证书
PowerShell 脚本:.ps1Set-AuthenticodeSignature 或 signtool可以执行策略为 AllSigned 时要求所有脚本具有可信签名
Java:.jarjarsigner可以签名可校验 jar 包完整性与发布者,企业环境常要求签名
Microsoft Office VBA 宏VBA 编辑器“工具 → 数字签名”可以配合 Office 宏安全设置,可只允许受信任发布者签名的宏运行
Linux / 跨平台安装包视打包工具而定部分支持部分安装包工具可使用 X.509 代码签名证书;发行版软件仓库(RPM / DEB)通常使用 GPG 密钥签名
macOS / iOS 应用codesign、Xcode不可以必须使用 Apple 签发的 Developer ID / 开发者证书,macOS 分发通常还需经过 Apple 公证
Android APKapksigner不需要使用开发者自行生成的签名密钥(自签名),不需要公共 CA 证书
注意:Electron、Qt 等跨平台框架打包的 Windows 版本同样使用 Authenticode 签名,可以使用公共 CA 代码签名证书;同一应用的 macOS 版本仍需使用 Apple Developer ID 签名并完成公证。
Brands

哪些品牌提供代码签名证书?

通过 EncryptionSign 可咨询订购以下品牌的代码签名证书。各品牌证书均遵循 CSBR,在 Windows 中受信任,差异主要在于验证级别覆盖、私钥交付方式(硬件令牌或云签名)与配套服务。

提供代码签名证书的品牌
品牌代码签名产品特点适合谁
SectigoOV 代码签名、EV 代码签名原 Comodo CA,价格梯度清晰,可与 SSL、S/MIME、文档签名证书统一采购中小软件企业、独立开发者
DigiCert代码签名、EV 代码签名;云签名 KeyLocker高端企业级品牌,KeyLocker 将私钥保存在云端 HSM,便于在 CI/CD 中远程签名大型软件发行商、驱动厂商
GlobalSign代码签名证书(验证级别以 CA 产品为准)1996 年创立的老牌 CA,提供企业 PKI 平台跨国企业、需要统一 PKI 供应商的组织
Certum代码签名、Open Source Code Signing;云签名 SimplySign欧洲老牌 CA,为开源开发者提供专门的代码签名产品开源项目、个人开发者
sslTrussslTrus 代码签名证书锐安信,国产品牌,提供中文服务;具体规格以 CA 为准偏好国内品牌与本地服务的企业
提示:各品牌代码签名证书在 Windows 中的签名效果相同,SmartScreen 信誉主要取决于发布者身份的历史表现而非品牌。选择时重点关注是否需要 EV(驱动)、个人还是组织申请,以及硬件令牌与云签名哪种交付方式更适合您的构建流程。
How to Order

如何申请代码签名证书?

代码签名证书暂不支持在 EncryptionSign 控制台在线下单。EncryptionSign 证书顾问可根据场景推荐品牌与产品,并协助完成身份验证与证书交付;硬件令牌需由 CA 寄送,整体周期以 CA 审核与物流为准。

  1. 咨询选型

    说明签名的平台与文件类型、个人还是组织申请、是否需要驱动签名或 CI/CD 自动签名,顾问推荐 OV / EV 与硬件令牌或云签名方案并报价。

  2. 提交身份资料

    组织提供营业执照、联系电话与申请人授权等资料;个人提供身份证件等资料,部分 CA 可能要求额外的身份核验步骤。

  3. CA 身份验证

    CA 核验组织或个人身份;组织验证包括第三方数据库核查与电话回访,EV 按更严格的标准审核。

  4. 签发与交付

    证书签发到 CA 寄送的 USB 硬件令牌,或开通云签名服务账户;安装驱动或客户端后,即可用 signtool 等工具签名并加时间戳。

Use Cases

代码签名证书适用于哪些场景?

凡是需要让用户确认“这个程序来自谁、有没有被改过”的软件分发场景,都适合使用代码签名证书。

独立开发者与开源项目

为发布在官网或代码托管平台上的 Windows 工具签名,用户看到的是开发者姓名而不是“未知发布者”;开源项目可了解 Certum Open Source Code Signing。

商业软件与安装包

为客户端程序、安装包与自动更新程序签名,防止安装包在下载站或传输途中被篡改、捆绑。

硬件厂商与驱动

使用 EV 代码签名证书注册微软合作伙伴中心,提交内核驱动由微软签名后发布。

企业内部脚本与宏

为 PowerShell 脚本与 Office VBA 宏签名,配合执行策略或组策略只允许受信任发布者的代码运行。

在 CI/CD 流水线中签名时,建议使用云签名服务或企业 HSM,避免把 USB 令牌长期插在构建服务器上;签名权限应与发布流程绑定,并保留签名记录以便审计。
Buying Guide

选购建议:是否需要代码签名证书?

根据软件的分发平台与使用场景判断。

适合申请代码签名证书的情况

  • 向公众发布 Windows 程序、安装包或自动更新程序;
  • 需要提交 Windows 内核驱动(须 EV 代码签名证书);
  • 分发 Java 应用、Office 宏或 PowerShell 脚本,并希望发布者可验证;
  • 企业安全策略、客户或分发渠道要求软件必须签名;
  • 希望下载包被篡改时,用户能立即发现。

可以考虑其他方案的情况

  • macOS / iOS 应用:加入 Apple Developer Program,使用 Developer ID / 开发者证书;
  • Android 应用:使用自行生成的签名密钥,或应用商店提供的签名服务;
  • 只在企业内网使用的脚本:可由企业内部 PKI 签发代码签名证书(仅在导入其根证书的设备上受信任);
  • 需要签署 PDF 合同或报告:选 文档签名证书;
  • 需要对电子邮件签名或加密:选 S/MIME 邮件证书。
FAQ

代码签名证书常见问题

关于代码签名证书的用途、OV 与 EV 选择、硬件令牌、时间戳与平台支持,开发者最常问的问题。

代码签名证书是什么?有什么作用?

代码签名证书是证书颁发机构(CA)在核验软件发布者身份后签发的数字证书。开发者用它对应的私钥为 .exe、.msi、驱动、脚本、Java 包与 Office 宏签名,用户运行时操作系统会验证签名:显示经过验证的发布者名称,并确认程序发布后没有被篡改或植入恶意代码。没有签名的程序在 Windows 中会显示“未知发布者”。

签名后为什么 Windows 仍然提示“Windows 已保护你的电脑”?

这是 Microsoft Defender SmartScreen 的信誉提示,它根据文件与发布者的下载和使用情况判断风险。代码签名让信誉可以累积到发布者身份上,但新证书、新发布者在下载量不足时仍可能触发提示。微软已调整 SmartScreen,EV 证书也不再保证立即消除提示,信誉仍需积累。建议用同一证书持续签名所有版本,并通过正规渠道分发。

OV 和 EV 代码签名证书怎么选?

两者签名强度相同,区别在于身份验证与用途。OV 可由个人或组织申请,适合大多数商业软件、工具与开源项目;EV 只面向组织,按更严格的标准审核,是通过微软合作伙伴中心提交 Windows 内核驱动的前提。不开发驱动、也没有客户或渠道明确要求 EV 时,OV 通常已经足够。

个人开发者可以申请代码签名证书吗?

可以。个人开发者可申请 OV(个人验证)代码签名证书,CA 会核验个人身份证件等资料,证书中显示的发布者为个人姓名。EV 代码签名证书只面向组织,个人无法申请。开源项目开发者还可以了解 Certum 提供的 Open Source Code Signing。

代码签名证书可以导出 .pfx 文件吗?为什么必须用 USB 令牌?

不可以。根据 CA/浏览器论坛《代码签名基线要求》,自 2023 年 6 月 1 日起,所有代码签名证书(包括 OV)的私钥都必须在符合 FIPS 140-2 Level 2 或 Common Criteria EAL4+ 的硬件(USB 令牌、HSM)或等效的云签名服务中生成和保存,私钥不能导出为文件。此前签发、可导出 .pfx 的证书到期后也需按新规则重新申请。

证书过期后,已经签名的软件还能用吗?

取决于签名时是否加了时间戳。签名时附加 RFC 3161 时间戳,系统会检查“签名时证书是否有效”,证书过期后程序仍显示签名有效;没有时间戳的签名在证书过期后会被视为无效。因此每次签名都应指定 CA 提供的时间戳服务器,例如 signtool 的 /tr 参数。

代码签名证书有效期多长?

2026 年起,CA/浏览器论坛规则将单张代码签名证书的最长有效期缩短为 460 天(约 15 个月)。购买多年期服务时,需要在服务期内重新签发证书并更新签名环境。已签名并加时间戳的程序不受证书更换影响。

代码签名证书能给 macOS、iOS 或 Android 应用签名吗?

不能。macOS 与 iOS 应用必须使用 Apple 签发的 Developer ID 或开发者证书签名(macOS 分发通常还需经过 Apple 公证),公共 CA 的代码签名证书不适用;Android APK 使用开发者自行生成的签名密钥(自签名),不需要公共 CA 证书。公共 CA 代码签名证书主要用于 Windows、Java 与 Office 宏等。

可以在 CI/CD 流水线中自动签名吗?

可以。USB 令牌需要物理插入电脑,不便于构建服务器使用;更适合的方式是云签名服务(如 DigiCert KeyLocker、Certum SimplySign)或企业自有的合格 HSM,通过客户端或 API 在流水线中远程签名,私钥始终保存在 HSM 中。具体集成方式以所选 CA 的文档为准。

代码签名证书多少钱?可以在线购买吗?

价格取决于品牌、验证级别(OV / EV)、申请主体、年限以及硬件令牌或云签名的交付方式。代码签名证书暂不支持在 EncryptionSign 控制台在线下单,请发送邮件至 support@encryptionsign.com 说明需求,证书顾问会推荐产品并报价,企业客户可申请专属价。

参考资料与更新说明

本文由 EncryptionSign 证书技术团队依据以下公开标准与资料整理,最后更新于 。CA 产品名称、验证规则与行业政策可能调整,请以 CA 官方与 CA/浏览器论坛最新发布为准;如需确认,请联系 support@encryptionsign.com。

  1. CA/浏览器论坛(CA/Browser Forum):代码签名基线要求(Code Signing Baseline Requirements,CSBR)
  2. RFC 3161:互联网 X.509 PKI 时间戳协议(TSP)
  3. RFC 5280:X.509 公钥基础设施证书与 CRL 规范
  4. Microsoft Learn:SignTool 与 Authenticode 代码签名文档
  5. Microsoft 合作伙伴中心:Windows 驱动程序签名要求
  6. Apple Developer:Developer ID 与公证(Notarization)
  7. Android Developers:应用签名(apksigner)

咨询代码签名证书

代码签名证书需要身份审核与硬件或云签名交付,暂不支持在线下单。告诉我们签名平台、申请主体以及是否需要驱动或 CI/CD 签名,证书顾问将推荐合适的产品与交付方式。