软件下载的时候被电脑提示未知开发者,怎么办?

4 阅读5分钟

代码签名的技术与合规角度,“未知开发者 / 未知发布者” 的核心原因是:你的软件没有被系统信任的数字证书签名,导致操作系统(Windows SmartScreen /macOS Gatekeeper)无法验证发布者身份与代码完整性。

下面从原理 → 证书选型 → Windows 签名 → macOS 签名 → 长期信任完整说明。


一、为什么未签名会报 “未知开发者”?

系统安全机制的核心判断:

  • 身份不可信:没有权威 CA(证书颁发机构)签发的代码签名证书,系统无法确认 “软件是谁做的”
  • 完整性风险:未签名文件可能被篡改、植入病毒,签名一旦被修改就会失效
  • 信誉机制:Windows SmartScreen 会对新证书 / 未签名软件强制警告,EV 证书可直接绕过

只有正规代码签名才能彻底消除警告,用户端看到 “发布者:XX 公司”。


二、代码签名证书类型与选型(Windows)

1. OV 代码签名(组织验证,主流)

  • 效果:显示公司名,新证书前 2–8 周仍有警告,积累信誉后自动消失
  • 适用:常规软件、工具、安装包(.exe/.msi/.dll)
  • 审核:1–3 天,需营业执照、法人信息

2. EV 代码签名(扩展验证,最高信任)

  • 效果立即消除 SmartScreen 警告,无过渡期
  • 价格:¥4,000–8,000 / 年
  • 强制场景内核驱动、Windows 10/11 驱动签名、WHQL 认证
  • 安全:私钥存USB Token 硬件(不可导出)
  • 审核:5–7 天,更严格的企业核验

3. 自签名(仅内部测试)

  • 免费,但公开发布完全无效
  • 用户会报 “不受信任的发布者”,需手动导入根证书(不可行)

4. 免费方案(开源 / 测试)

  • Sigstore:GitHub 账号 OIDC 签名,证明未篡改,但 Windows 仍可能提示

选型建议

  • 普通软件:OV 证书(性价比)
  • 驱动 / 高信任需求:EV 证书
  • 个人 / 小微:注册个体户 → 申请 OV

三、Windows 完整代码签名流程(彻底解决 “未知发布者”)

1. 申请证书(CA 机构)

主流 CA:DigiCert、Sectigo、GlobalSign、JoySSL(国内)

  • 准备材料:

    • 企业:营业执照、法人身份证、对公账户验证
    • 个人:个体户执照 + 身份证
  • 生成 CSR(证书签名请求)

    powershell

    # PowerShell生成
    New-SelfSignedCertificate -Type CodeSigningCert -Subject "CN=你的公司名" -KeyUsage DigitalSignature
    
  • 提交 CA 审核 → 获取 .pfx 证书(OV)或 USB Token(EV)

2. 用 SignTool 签名(Windows SDK)

(1)安装 SignTool

  • 安装 Windows SDK 或 Visual Studio(含签名工具)

(2)签名命令(必加时间戳!)

cmd

signtool sign /f 证书.pfx /p 证书密码 /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 你的软件.exe
  • /f:证书文件
  • /p:证书密码
  • /fd SHA256:签名算法(必须 SHA256,旧 SHA1 无效)
  • /tr时间戳服务器(关键!避免证书过期后签名失效)

(3)验证签名

cmd

signtool verify /pa /v 你的软件.exe
  • 成功:显示 “数字签名详细信息”→ 发布者为你的公司名

3. 提升 SmartScreen 信誉(OV 证书必做)

  • 保持同一证书长期签名、持续分发
  • 提交微软 SmartScreen 信誉申请
  • 避免报毒:签名后用杀毒软件扫描、不捆绑恶意程序

四、macOS 代码签名(解决 “无法打开,因为来自未知开发者”)

1. 前提:苹果开发者账号

  • 年费:¥688 / 年(个人 / 公司)
  • 申请:Apple Developer → 实名认证

2. 证书类型

  • Developer ID Application:用于非 App Store 分发(直接官网下载)Apple Developer

3. 签名 + 公证(macOS 10.15+ 必须)

(1)用 codesign 签名

bash

运行

# 签名(--deep递归签内嵌组件)
codesign --force --deep --sign "Developer ID Application: 你的公司名 (TeamID)" --timestamp 你的App.app
  • --timestamp:添加时间戳(必加)
  • 查看证书:security find-identity -v -p codesigning

(2)苹果公证(Notarize)—— 强制!

bash

运行

# 上传公证
xcrun notarytool submit 你的App.zip --apple-id 你的邮箱 --password 专用密码 --team-id 你的TeamID

# 查看日志
xcrun notarytool log 提交ID --apple-id 你的邮箱 --password 专用密码 --team-id 你的TeamID

#  stapler 绑定公证结果(离线也可验证)
xcrun stapler staple 你的App.app
  • 公证通过后:彻底消除 Gatekeeper 警告

(3)验证

bash

运行

codesign -vvv 你的App.app
spctl -a -vvv 你的App.app
  • 成功:acceptedsource=Developer ID

五、关键最佳实践(必看)

  1. 必须加时间戳

    • 无时间戳:证书过期 → 签名失效 → 重新报未知发布者
  2. SHA256 算法

    • SHA1 已被系统弃用,必须用 SHA256
  3. 证书安全

    • EV 私钥存硬件 Token,不导出、不泄露
    • OV 证书(.pfx)加密保存,权限最小化
  4. 驱动程序特殊要求

    • Windows 10/11:必须 EV 签名 + WHQL 认证
    • 未签名驱动:无法安装(拦截率≈100%)
  5. 避免无效方案

    • 自签名、免费 SSL 证书(Let’s Encrypt)不能用于代码签名

六、效果对比(签名 vs 未签名)

表格

状态用户看到系统警告转化率
未签名未知发布者红色强拦截低(流失 70%+)
OV 签名(新)公司名轻度警告
OV(信誉满)公司名无警告
EV 签名公司名立即无警告最高
macOS 签名 + 公证可信开发者无警告

七、总结(最简路径)

  1. Windows

    • 常规软件:买 OV 代码签名证书 → SignTool SHA256 + 时间戳 → 积累信誉
    • 驱动:EV 证书 + WHQL
  2. macOS

    • 苹果开发者账号 → Developer ID 签名 + 公证

一句话正规代码签名是唯一彻底解决 “未知开发者” 的方法,临时绕过只是权宜之计。