独立开发者与开源项目
为发布在官网或代码托管平台上的 Windows 工具签名,用户看到的是开发者姓名而不是“未知发布者”;开源项目可了解 Certum Open Source Code Signing。
一句话回答:代码签名证书用于为 Windows 程序、驱动、Java 包与 Office 宏签名,让用户看到经过 CA 验证的发布者名称,并确认代码未被篡改。个人开发者与一般商业软件选 OV 代码签名即可;需要提交 Windows 内核驱动,或需要最严格审核的企业身份,选 EV(仅限组织)。证书私钥必须存放在硬件令牌、HSM 或云签名服务中,每次签名都应加时间戳。
代码签名(Code Signing)是用公钥密码学为软件附加“发布者身份 + 完整性”证明的技术。代码签名证书是其中的身份凭证:CA 核验申请者(个人或组织)的真实身份后,签发一张写有发布者名称与公钥、扩展密钥用法为 codeSigning 的 X.509 证书。开发者用与之对应的私钥签名软件,用户的操作系统再用证书中的公钥验证签名。在 Windows 中,这套机制称为 Authenticode。
因此,代码签名的价值来自可追溯的身份:每一个签名都能追溯到经过 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 与 EV 两级,OV 可由个人或组织申请。三者的签名算法与强度相同,差别在于验证内容、证书中显示的发布者以及可用的场景。
| 对比项 | OV 代码签名(个人) | OV 代码签名(组织) | EV 代码签名 |
|---|---|---|---|
| 申请主体 | 个人开发者(自然人) | 依法注册的企业或机构 | 依法注册且正常存续的组织,不接受个人 |
| 验证内容 | 个人身份证件等,核验方式以 CA 为准 | 组织合法存在、地址与电话、申请人授权 | 按 EV 标准核验法律存在、实际经营、运营存续与申请人授权 |
| 证书中显示的发布者 | 个人姓名 | 组织名称 | 组织名称,以及注册号、注册地等信息 |
| 私钥存储 | 硬件令牌 / HSM / 云签名 | 硬件令牌 / HSM / 云签名 | 硬件令牌 / HSM / 云签名 |
| Windows 内核驱动提交 | 不可用 | 不可用 | 合作伙伴中心提交的前提 |
| SmartScreen 信誉 | 需随下载与使用逐步积累 | 需随下载与使用逐步积累 | 不再保证立即消除提示,仍需积累 |
| 适合 | 独立开发者、开源作者 | 企业软件、工具与内部程序发布 | 驱动厂商、大型软件发行商、安全与金融软件 |
公共信任的代码签名证书受 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 硬件令牌 | CA 寄送经过认证的 USB 令牌,私钥在令牌内生成;签名时将令牌插入电脑并输入 PIN | 成本低,私钥物理隔离 | 个人开发者、签名频率较低的团队 |
| 企业自有 HSM | 在符合要求的 HSM(含部分云 HSM)中生成密钥,并向 CA 提供密钥证明(key attestation) | 与企业现有密钥管理体系集成 | 已部署 HSM 的大型企业 |
| 云签名服务 | 私钥保存在 CA 的云端 HSM,通过客户端工具或 API 远程签名,如 DigiCert KeyLocker、Certum SimplySign | 无需寄送硬件,适合多人协作与自动化构建 | CI/CD 流水线、分布式开发团队 |
Microsoft Defender SmartScreen 会根据文件与发布者的信誉决定是否显示“Windows 已保护你的电脑”。代码签名让信誉可以累积到发布者身份上,但新证书、新发布者在下载量不足时仍可能触发提示。微软已调整 SmartScreen,EV 证书不再保证立即消除提示,信誉仍需积累。建议用同一发布者身份持续签名所有版本、通过官网等正规渠道分发,并避免频繁更换签名主体。
公共 CA 签发的代码签名证书主要用于 Windows 生态、Java 与 Microsoft Office 宏;苹果与安卓平台使用各自独立的签名体系,不使用公共 CA 的代码签名证书。
| 平台 / 文件类型 | 签名工具 | 能否使用公共 CA 代码签名证书 | 说明 |
|---|---|---|---|
| Windows 程序:.exe、.dll | signtool(Windows SDK) | 可以 | Authenticode 签名,UAC 中显示已验证的发布者 |
| Windows 安装包:.msi、.cab | signtool | 可以 | 安装包签名后,下载与安装环节都能校验完整性 |
| Windows 内核驱动:.sys | 微软合作伙伴中心 | 需 EV 证书 | Windows 10 起,新的内核模式驱动通常须提交微软合作伙伴中心由微软签名,提交账户需使用 EV 代码签名证书 |
| PowerShell 脚本:.ps1 | Set-AuthenticodeSignature 或 signtool | 可以 | 执行策略为 AllSigned 时要求所有脚本具有可信签名 |
| Java:.jar | jarsigner | 可以 | 签名可校验 jar 包完整性与发布者,企业环境常要求签名 |
| Microsoft Office VBA 宏 | VBA 编辑器“工具 → 数字签名” | 可以 | 配合 Office 宏安全设置,可只允许受信任发布者签名的宏运行 |
| Linux / 跨平台安装包 | 视打包工具而定 | 部分支持 | 部分安装包工具可使用 X.509 代码签名证书;发行版软件仓库(RPM / DEB)通常使用 GPG 密钥签名 |
| macOS / iOS 应用 | codesign、Xcode | 不可以 | 必须使用 Apple 签发的 Developer ID / 开发者证书,macOS 分发通常还需经过 Apple 公证 |
| Android APK | apksigner | 不需要 | 使用开发者自行生成的签名密钥(自签名),不需要公共 CA 证书 |
通过 EncryptionSign 可咨询订购以下品牌的代码签名证书。各品牌证书均遵循 CSBR,在 Windows 中受信任,差异主要在于验证级别覆盖、私钥交付方式(硬件令牌或云签名)与配套服务。
| 品牌 | 代码签名产品 | 特点 | 适合谁 |
|---|---|---|---|
| Sectigo | OV 代码签名、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,为开源开发者提供专门的代码签名产品 | 开源项目、个人开发者 |
| sslTrus | sslTrus 代码签名证书 | 锐安信,国产品牌,提供中文服务;具体规格以 CA 为准 | 偏好国内品牌与本地服务的企业 |
代码签名证书暂不支持在 EncryptionSign 控制台在线下单。EncryptionSign 证书顾问可根据场景推荐品牌与产品,并协助完成身份验证与证书交付;硬件令牌需由 CA 寄送,整体周期以 CA 审核与物流为准。
说明签名的平台与文件类型、个人还是组织申请、是否需要驱动签名或 CI/CD 自动签名,顾问推荐 OV / EV 与硬件令牌或云签名方案并报价。
组织提供营业执照、联系电话与申请人授权等资料;个人提供身份证件等资料,部分 CA 可能要求额外的身份核验步骤。
CA 核验组织或个人身份;组织验证包括第三方数据库核查与电话回访,EV 按更严格的标准审核。
证书签发到 CA 寄送的 USB 硬件令牌,或开通云签名服务账户;安装驱动或客户端后,即可用 signtool 等工具签名并加时间戳。
凡是需要让用户确认“这个程序来自谁、有没有被改过”的软件分发场景,都适合使用代码签名证书。
为发布在官网或代码托管平台上的 Windows 工具签名,用户看到的是开发者姓名而不是“未知发布者”;开源项目可了解 Certum Open Source Code Signing。
为客户端程序、安装包与自动更新程序签名,防止安装包在下载站或传输途中被篡改、捆绑。
使用 EV 代码签名证书注册微软合作伙伴中心,提交内核驱动由微软签名后发布。
为 PowerShell 脚本与 Office VBA 宏签名,配合执行策略或组策略只允许受信任发布者的代码运行。
根据软件的分发平台与使用场景判断。
关于代码签名证书的用途、OV 与 EV 选择、硬件令牌、时间戳与平台支持,开发者最常问的问题。
代码签名证书是证书颁发机构(CA)在核验软件发布者身份后签发的数字证书。开发者用它对应的私钥为 .exe、.msi、驱动、脚本、Java 包与 Office 宏签名,用户运行时操作系统会验证签名:显示经过验证的发布者名称,并确认程序发布后没有被篡改或植入恶意代码。没有签名的程序在 Windows 中会显示“未知发布者”。
这是 Microsoft Defender SmartScreen 的信誉提示,它根据文件与发布者的下载和使用情况判断风险。代码签名让信誉可以累积到发布者身份上,但新证书、新发布者在下载量不足时仍可能触发提示。微软已调整 SmartScreen,EV 证书也不再保证立即消除提示,信誉仍需积累。建议用同一证书持续签名所有版本,并通过正规渠道分发。
两者签名强度相同,区别在于身份验证与用途。OV 可由个人或组织申请,适合大多数商业软件、工具与开源项目;EV 只面向组织,按更严格的标准审核,是通过微软合作伙伴中心提交 Windows 内核驱动的前提。不开发驱动、也没有客户或渠道明确要求 EV 时,OV 通常已经足够。
可以。个人开发者可申请 OV(个人验证)代码签名证书,CA 会核验个人身份证件等资料,证书中显示的发布者为个人姓名。EV 代码签名证书只面向组织,个人无法申请。开源项目开发者还可以了解 Certum 提供的 Open Source Code Signing。
不可以。根据 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 应用必须使用 Apple 签发的 Developer ID 或开发者证书签名(macOS 分发通常还需经过 Apple 公证),公共 CA 的代码签名证书不适用;Android APK 使用开发者自行生成的签名密钥(自签名),不需要公共 CA 证书。公共 CA 代码签名证书主要用于 Windows、Java 与 Office 宏等。
可以。USB 令牌需要物理插入电脑,不便于构建服务器使用;更适合的方式是云签名服务(如 DigiCert KeyLocker、Certum SimplySign)或企业自有的合格 HSM,通过客户端或 API 在流水线中远程签名,私钥始终保存在 HSM 中。具体集成方式以所选 CA 的文档为准。
价格取决于品牌、验证级别(OV / EV)、申请主体、年限以及硬件令牌或云签名的交付方式。代码签名证书暂不支持在 EncryptionSign 控制台在线下单,请发送邮件至 support@encryptionsign.com 说明需求,证书顾问会推荐产品并报价,企业客户可申请专属价。
本文由 EncryptionSign 证书技术团队依据以下公开标准与资料整理,最后更新于 。CA 产品名称、验证规则与行业政策可能调整,请以 CA 官方与 CA/浏览器论坛最新发布为准;如需确认,请联系 support@encryptionsign.com。