验证 macos 安装包签名需确认其来自 apple、未被篡改且已公证:用 codesign -dv 检查 signer(应为 apple mac os application signing)、teamidentifier(eqhxz8m8av)和 notarized(yes);用 spctl --assess 验证 gatekeeper 评估结果为 accepted;并确保 sip 启用、amfi 内核扩展正常加载。
验证 macos 系统安装包签名,核心是确认它来自 apple、未被篡改、且符合 gatekeeper 和公证(notarization)要求。不是“能点开就安全”,而是要主动检查签名链和公证状态。
下载后立即验证 .pkg 或 .dmg 的签名
若你从 Apple 开发者网站或支持页面手动下载了 .pkg(如 macOS 安装器)或 .dmg(含安装器),必须在运行前验证:
- 终端执行:
xattr -l /路径/到/安装器.pkg,检查是否含com.apple.quarantine—— 有说明系统已标记为“来自互联网”,需进一步验证签名 - 运行:
codesign -dv --verbose=4 /路径/到/安装器.pkg,重点看三行:
→ Signer: 应为 “Apple Mac OS Application Signing” 或 “Apple Software Update Signing”
→ TeamIdentifier: 应为 “EQHXZ8M8AV”(Apple 官方团队 ID)
→ notarized: 显示 “yes” 表示已通过 Apple 公证(macOS 10.14.5+ 强制要求) - 对 .dmg 文件,先挂载:
hdiutil attach 下载的系统.dmg,再对其中的Install macOS XXX.app执行同样codesign -dv检查
用 spctl 确认 Gatekeeper 是否允许运行
Gatekeeper 是系统级守门员,签名正确只是前提,还需策略放行:
- 检查当前策略:
spctl --status,返回 “assessments enabled” 才正常 - 直接评估安装器:
spctl --assess --type execute --verbose=4 /路径/到/安装器.pkg
正常应输出 “accepted”,若报 “rejected” 并提示 “unnotarized developer ID” 或 “invalid signature”,则不可信 - 注意:即使你用
xattr -d com.apple.quarantine清除了隔离属性,spctl仍会基于签名和公证状态做最终裁决
安装完成后交叉验证签名有效性
升级成功不等于签名链完整。需确认系统内核、驱动、启动项仍受 AMFI(Apple Mobile File Integrity)保护:
- 终端运行:
kmutil showloaded | grep -i apple,检查关键内核扩展(如AppleMobileFileIntegrity)是否加载且签名有效 - 确认 SIP(系统完整性保护)未被意外关闭:
csrutil status,应显示 “enabled” - 查看系统更新历史中本次安装记录:
softwareupdate --history | grep -i "install\|upgrade",比对时间与版本,确认非静默覆盖或降级
签名验证不是一次性动作,而是贯穿下载、安装、运行三阶段的闭环。跳过任一环,都可能让恶意修改或损坏包绕过防护。











