
▲ 图1:MSI/EXE应用程序上架微软商店必须进行数字签名
一、微软商店的硬性门槛:代码签名是不可绕过的前提
对于希望通过微软应用商店(Microsoft Store)分发 Win32 桌面应用的开发者而言,代码签名绝非可选项,而是通过审核的强制性前置条件。微软官方文档明确规定:所有提交至 Microsoft Store 的 MSI 或 EXE 安装程序,以及其内部包含的全部可移植可执行(PE)文件,必须使用由 Microsoft 受信任根计划(Trusted Root Program)中认可的证书颁发机构(CA)颁发的代码签名证书完成数字签名。
"二进制文件及其所有可移植可执行文件(PE)文件都必须使用代码签名证书进行数字签名,该证书链接到证书颁发机构(CA)颁发的证书,该证书是 Microsoft 受信任的根计划的一部分。"
这一政策背后的安全逻辑清晰而坚实:
发布者身份验证:通过 CA 的严格身份核验,确保软件来源真实可信,从源头阻断恶意软件仿冒合法应用的途径。
代码完整性保障:签名机制为软件提供防篡改指纹,用户可验证程序自签名后未经任何修改,杜绝中间人篡改与恶意代码植入风险。
用户体验优化:使用受信任证书签名的应用将显示已验证的发布者名称,有助于用户确认软件来源。需要注意的是,SmartScreen 信誉需要通过足够的下载量逐步建立——新发布的应用初期仍可能显示"无法识别的应用"提示,直至累积充足的积极信誉证据。
二、代码签名证书选型核心准则
2.1 可信的证书颁发机构(CA)
证书颁发机构的选择是选型的第一道关口。根据微软推荐和行业实践,以下 CA 颁发的代码签名证书均满足 Microsoft 受信任根计划要求:
Sectigo(原 Comodo)—— 性价比突出
DigiCert —— 品牌认知度高
GlobalSign —— 国际公认的权威 CA,兼容性好,性价比高
以上证书可以直接在线购买:https://www.ihuandu.com/codesigning.html
开发者应避免使用任何未列入微软受信任根计划的 CA 颁发的证书,自签名证书亦一律无效。
2.2 OV 代码签名证书(组织验证)
OV(Organization Validation)代码签名证书签发前,CA 会对申请组织进行企业资质验证,确保证书与真实法律实体绑定。其核心特征如下:
签名后显示组织名称,消除"未知发布者"警告
支持 MSI、EXE、DLL、OCX、XPI、CAB 等全部常见应用程序与组件格式
签发周期通常为 1 至 3 个工作日
完全满足微软商店信任链要求
适用场景:绝大多数桌面应用程序开发者,尤其是无需内核级驱动支持的标准 Win32 软件产品。
2.3 EV 代码签名证书(扩展验证)
EV(Extended Validation)代码签名证书提供最高安全级别的身份验证,申请流程更为严格,需经过额外的企业资质审查。其与 OV 证书的核心差异在于:
此前 EV 证书可即时获得 SmartScreen 信誉——但微软已于数年前调整此机制。根据微软官方最新文档的明确说明,EV 证书不再绕过 SmartScreen,OV 和 EV 证书在 SmartScreen 行为上已趋于一致,均需通过累积下载量和用户行为来逐步建立信誉。
支持 WHQL(Windows Hardware Quality Labs)认证流程,包括所需的企业 Microsoft Entra ID 全局管理员账户与 Windows 硬件开发人员计划注册
签发周期通常为 1 至 5 个工作日,价格高于 OV 证书
适用场景:涉及 Windows 内核驱动开发的软件项目,或对品牌信誉有高要求的企业级产品。
2.4 选型对比一览
| 对比维度 | OV 代码签名证书 | EV 代码签名证书 |
|---|---|---|
| 验证级别 | 企业信息验证 | 企业信息验证 + 严格额外验证 |
| 签发周期 | 1 ~ 3 个工作日 | 1 ~ 5 个工作日 |
| 签名文件类型 | .msi, .exe, .dll, .ocx, .xpi, .cab 等 | 含 OV 全部类型 |
| 内核驱动签名 | 不支持 | 支持 |
| WHQL 认证 | 不支持 | 支持 |
| SmartScreen 信誉 | 需累积下载量建立信誉 | 需累积下载量建立信誉 |
| 微软商店兼容 | 完全兼容 | 完全兼容 |
三、微软商店完整上架流程
基于微软官方文档梳理,将 MSI/EXE 应用上架至 Microsoft Store 的完整流程如下:
申请合规的代码签名证书:根据项目需求选择 OV 或 EV 证书,确保证书颁发机构在 Microsoft 受信任根计划名单中。申请期间配合 CA 完成企业身份验证。
执行全量数字签名:使用获得的证书对 MSI 或 EXE 安装程序及其包含的全部 PE 文件逐一进行数字签名。签名时务必附加 RFC 3161 时间戳,以确保签名在证书过期后依然有效。
准备提交物料:生成版本化的 HTTPS 直接下载链接(不可使用重定向或下载器存根),确保安装包满足微软商店的静默安装要求(安装过程中不显示 UI 界面,UAC 对话框除外),且为独立完整安装包而非运行时下载型 Web 安装器。
合作伙伴中心提交:注册 Microsoft Store 开发者账户(需完成企业或个人信息验证),在合作伙伴中心上传应用包并填写元数据、隐私策略等信息。
等待认证与审核:微软将对提交的应用执行安全测试、技术合规性检查与内容政策审查。审核通过后应用即正式上架,面向全球 Windows 用户开放下载。
四、常见误区与避坑指南
在实践过程中,以下常见问题可能导致审核失败或用户端体验不佳,需特别注意:
使用自签名证书:这是最常见的提交失败原因。自签名证书不在 Microsoft 受信任根计划中,微软商店审核系统将直接拒绝。
遗漏 PE 文件签名:仅对安装程序本体签名而忽略内部 DLL、OCX 等 PE 文件,将导致审核不通过。务必确保包内每一个可执行文件均已完成签名。
未添加时间戳:签名时若未附带时间戳,证书过期后签名将失效,用户在安装时将面临安全警告。必须在签名命令中指定可信时间戳服务器。
使用运行时下载器:微软商店要求安装程序为独立完整包,不接受运行时从网络下载载荷的存根安装器或 Web 安装器。
安装过程显示 UI:除系统 UAC 对话框外,安装过程必须为静默模式,不得弹出自定义安装界面。
使用非 HTTPS 或非直接下载链接:提交的下载 URL 必须为 HTTPS 直链,且提交后二进制文件不可变更。每次更新均需提供新版本 URL。
五、结语
对于面向 Windows 平台的软件开发者而言,代码签名证书已从"锦上添花的安全增强"转变为"上架微软商店的必备通行证"。选择由 Microsoft 受信任根计划认可的 CA 颁发的 OV 或 EV 代码签名证书,对安装包及全部 PE 文件执行完整签名并附加时间戳,是确保应用顺利通过审核、安全分发给全球用户的关键一步。
开发者只需遵循"可信 CA → 正确类型 → 全量签名 → 合规提交"这一核心链路,即可高效完成微软商店上架流程,让产品触达亿万 Windows 用户。
参考资料
Microsoft Learn — MSI/EXE 应用的应用包要求:https://learn.microsoft.com/zh-cn/windows/apps/publish/publish-your-app/msi/app-package-requirements
Microsoft Learn — Microsoft 受信任的根计划参与者列表:https://learn.microsoft.com/zh-cn/security/trusted-root/participants-list
Microsoft Learn — 代码签名选项概述:https://learn.microsoft.com/zh-cn/windows/apps/package-and-deploy/code-signing-options



