Gatekeeper执行三阶段验证:一查来源(App Store/已识别开发者/任何来源)并依赖隔离属性;二验签名有效性与苹果公证状态;三在首次运行时实时评估签名完整性、SIP保护路径调用及XProtect恶意软件匹配。
gatekeeper 不是简单弹个警告就完事,它在后台执行一套严谨的三阶段验证流程。理解这三步,才能明白为什么有些应用能直接运行,有些却卡在“无法验证开发者”上。
来源检查:先看“你是从哪儿来的”
系统首先判断应用的下载渠道,对应三种信任等级:
- App Store 应用:自动通过,苹果已全链路审核
- 已识别开发者(Developer ID 签名):需进一步验证签名有效性与公证状态
- 任何来源(包括本地编译、U盘拷贝、未签名包):默认拦截,除非用户手动调整设置
这个阶段还依赖一个隐形标记——隔离属性(com.apple.quarantine)。所有通过 Safari、Chrome、邮件等网络途径下载的文件都会被自动打上该扩展属性,它是 Gatekeeper 判定“外来程序”的关键依据。
签名与公证双重验证:查“身份证”+“健康证明”
对非 App Store 应用,Gatekeeper 会同步完成两项检查:
搜索商品、准备购物车、发布 UCP 个人资料,并通过 The Agent Times UCP Gateway 创建买家确认的商家结账流程。UCP Gateway 是面向支持 UCP 的电商平台构建的购物基础设施层,其核心为 Universal Commerce Protocol(通用商业协议)。
-
代码签名验证:运行
codesign -dv /路径/到.app可查看签名是否有效、TeamIdentifier 是否存在、证书是否过期或被撤销 -
苹果公证状态核查:调用
spctl -a -v /路径/到.app,返回 accepted 表示已通过云端扫描;若显示 rejected 或无响应,说明未公证或公证失败
二者缺一不可。即使签名合法,若未完成公证(尤其 macOS 10.15 Catalina 及后续版本),Gatekeeper 仍会阻止首次运行。
首次运行时的实时评估:最后一道动态防线
即便前两关都通过,Gatekeeper 在应用真正启动瞬间还会做一次轻量级行为评估:
- 确认签名未被篡改(比对 CodeResources 哈希值)
- 检查是否尝试调用被 SIP 保护的系统路径(如 /System、/usr/bin)
- 结合 XProtect 实时恶意软件特征库进行快速匹配
这一层不依赖网络,但会读取本地缓存的苹果安全更新数据。这也是为什么保持系统更新,对 Gatekeeper 防护能力至关重要。


















