macOS 二进制安装包需满足签名+公证双验证:必须使用有效 Developer ID 证书签名,且 .pkg 等从网络下载的安装器须经 Apple 公证;证书过期、时间偏差或缺少公证均导致 Gatekeeper 拦截。

macOS 对二进制安装包(如 .pkg、.dmg 中的可执行文件或直接分发的命令行工具)实施严格的签名与公证要求,核心目标是阻止未经验证的代码运行。这些限制不是“一刀切”的拦截,而是分层校验机制:签名存在性 → 签名有效性 → 证书可信性 → 公证状态 → 系统时间匹配。2026 年当前环境下,多数失效问题并非系统故意刁难,而是签名链中某一个环节已自然过期或中断。
签名必须使用有效的 Developer ID 证书
macOS Gatekeeper 默认只信任两类签名来源:Mac App Store 和经 Apple 颁发的 Developer ID 证书。自签名、adhoc 签名或企业证书(除非设备已配置对应 MDM 信任)均不被接受。
- 证书有效期通常为 1 年,2022–2023 年签发的内测包或旧版工具在 2026 年基本全部过期
- 执行 security find-identity -v -p codesigning 可列出本地可用证书;若输出中无非 EXPIRED 的 Developer ID Installer 或 Developer ID Application 条目,说明系统无法完成签名链验证
- 即使安装包本身未被篡改,只要签名所用证书过期或被吊销,Gatekeeper 就会拒绝加载
公证(Notarization)已成为 Ventura 及更新系统的硬性门槛
从 macOS Ventura 开始,仅签名已不够——Apple 要求所有从互联网下载的安装器(尤其是 .pkg)必须完成公证流程。未公证的包在首次运行时会被拦截,且“仍要打开”按钮可能不出现。
- 公证票据以扩展属性 com.apple.quarantine 形式嵌入安装包;可用 xattr -pl com.apple.quarantine YourApp.pkg 查看是否含 ticket=1
- 用 spctl --assess --type install --verbose=4 YourApp.pkg 检查结果:只有输出含 accepted 才代表签名+公证双通过
- 微软 PowerShell 7.5.6(2026 年 5 月发布)已默认完成公证;但很多开源项目或老版本二进制包仍未适配此要求
系统时间偏差会直接导致签名验证失败
苹果签名机制依赖精确时间戳比对:系统时间必须落在证书的 Valid From 与 Valid To 区间内。哪怕偏差几分钟,也可能触发“无法验证完整性”提示。
- 进入“系统设置 → 通用 → 日期与时间”,务必开启“自动设置日期与时间”并确认同步成功
- 手动修改过系统时间(例如为安装旧系统临时调早)后,需重启 Mac 才能刷新 Gatekeeper 缓存
- 终端中可临时校验:运行 codesign -dv --verbose=4 YourApp.pkg,关注输出中 valid on disk 和证书有效期字段是否与当前时间逻辑自洽
绕过限制 ≠ 解决问题,仅适用于可信来源的临时处置
当确认安装包来源可靠(如官网下载、内部构建),但因签名时效问题被拦,可采用用户授权方式放行,但这不修复签名本身,也不适用于后续自动更新场景。
- 双击 pkg 后关闭警告窗口 → 进入“系统设置 → 隐私与安全性 → 安全性”区域 → 找到灰色提示行 → 点击“仍要打开”
- 命令行安装时加 -allowUntrusted 参数:sudo installer -allowUntrusted -pkg ./xxx.pkg -target /
- 对已下载的安装器清除隔离属性:xattr -d com.apple.quarantine /path/to/Installer.app,再尝试启动


















