macOS 安装 Clash 客户端:网络扩展授权、钥匙串弹窗与已损坏提示处理
覆盖「已损坏无法打开」的放行方法、首次开启 TUN 时的网络扩展授权,以及反复弹出钥匙串密码框的原因与解决办法。
先区分安装拦截、网络权限与凭据访问
macOS 上名称包含 Clash 的客户端并不使用同一套安装和授权机制。图形界面、代理内核、特权辅助程序与网络扩展可能来自不同组件。Clash Meta 现称 mihomo;使用 mihomo 内核,不代表客户端一定通过 Apple 网络扩展实现 TUN。处理弹窗前,先记录客户端名称、版本、macOS 版本和完整提示,不要把所有密码框都当成同一项权限。
| 出现时机与提示 | 主要检查对象 | 下一步 |
|---|---|---|
| 首次启动提示无法验证开发者、已损坏 | 安装包来源、架构、签名与隔离属性 | 先重新获取对应安装包,再检查系统拦截信息 |
| 安装辅助工具时要求管理员密码 | 特权辅助程序或服务模式 | 核对请求者名称与安装操作是否对应 |
| 开启 TUN 时提示添加 VPN 配置或批准扩展 | 客户端采用的网络接管实现 | 按系统显示的配置或扩展类型授权 |
| 提示访问钥匙串中的某个项目 | 已存储凭据与应用访问控制 | 核对项目名称、请求应用和登录钥匙串状态 |
安装前核对芯片架构与应用位置
Apple 芯片选 arm64,Intel 机型选 x64
打开苹果菜单 →「关于本机」。显示 Apple M 系列芯片时,优先选择 macOS arm64 或 Apple Silicon 构建;显示 Intel 处理器时,选择 x64 或 x86_64 构建。Universal 构建可能同时包含两种架构,以发布说明为准。Apple 芯片通过 Rosetta 运行部分 Intel 应用,并不能保证其中的辅助程序也兼容。
- 退出已经运行的同名客户端,避免旧进程继续占用本地代理端口。
- 打开 DMG,将应用拖入「应用程序」,不要长期从磁盘映像或「下载」目录运行。
- 推出 DMG,再从「应用程序」启动客户端;后续授权应对应这个固定位置的副本。
- 首次先导入配置并测试系统代理,确认基本连接正常后再启用 TUN。
同时保留多个同名副本,会让登录项、钥匙串访问记录和实际启动路径不一致。更新时应先退出应用,再替换「应用程序」内的原副本;不要一边运行旧版本,一边启动新下载的副本进行授权。
「已损坏无法打开」:先检查,再决定是否放行
「已损坏」不一定表示下载文件截断,也可能涉及签名失效、应用内容被修改或系统评估未通过。另一种常见提示是「无法验证开发者」。两者不能简单等同,更不应看到提示就直接关闭系统安全检查。
优先使用系统提供的单应用放行入口
- 确认安装包来自所选项目的正式发布渠道,核对系统要求与芯片架构。
- 重新下载安装包,完整替换旧副本,随后尝试启动一次。
- 打开「系统设置」→「隐私与安全性」,查看「安全性」区域是否出现对应应用的拦截记录。
- 只有核对应用身份后,才使用系统提供的「仍要打开」等操作,并按提示完成认证。
macOS 15 对部分未正确签名或公证应用的放行方式作了调整,不应依赖旧教程中的「右键 → 打开」一定能绕过提示。若系统明确报告恶意软件或应用将损坏电脑,应停止运行,重新核对来源;普通应用的放行步骤不适用于这种警告。
终端检查只针对确定的应用
以下以实际安装路径为 /Applications/Clash Verge.app 的客户端举例。应用名不同就使用 Finder 中的真实路径;可以把应用拖入终端来获得路径。下面三条命令分别查看隔离属性、验证代码签名完整性、请求系统执行评估,不会授予网络权限。
xattr -p com.apple.quarantine "/Applications/Clash Verge.app"
codesign --verify --deep --strict --verbose=2 "/Applications/Clash Verge.app"
spctl --assess --type execute --verbose=4 "/Applications/Clash Verge.app"
第一条返回「No such xattr」表示没有该属性,并不是安装失败。签名验证通过也不能单独证明发布者可信;还需要核对来源和签名身份。若签名验证失败,优先重新下载或向维护者反馈,不要通过重新签名来掩盖失败原因。
仅在已经确认来源、应用完整性,并理解解除隔离风险时,才考虑删除该应用自身的隔离属性:
xattr -d com.apple.quarantine "/Applications/Clash Verge.app"
这条命令不会修复损坏的程序、补齐签名或完成公证,也未必能解决启动失败。不要把目标改为整个「应用程序」目录,不要习惯性添加递归参数或管理员权限,更不要全局关闭 Gatekeeper。若仍然失败,保留报错并回到项目的安装说明核对。
首次开启 TUN:网络扩展与辅助服务分别处理
TUN 通过虚拟网络接口和路由接管流量,能够覆盖部分不遵守系统代理的应用,但实际范围仍受路由、排除项和协议支持限制。系统代理则主要向应用提供 HTTP、HTTPS 或 SOCKS 代理设置,通常不需要安装网络扩展。两种模式的授权需求不能互相推导。
先确认客户端使用哪种实现
- 特权辅助程序或服务模式:客户端可能要求安装辅助工具,以便内核创建 TUN 接口、调整路由和 DNS。这类实现不一定会出现在网络扩展列表中。
- Network Extension:使用 Apple 网络扩展的客户端可能申请添加 VPN 配置、运行隧道提供程序,或批准相应扩展。只批准当前安装应用对应的项目。
- 内容过滤器:若另有过滤网络内容的提示,应核对项目文档是否确实需要它;这不是所有 Clash 客户端开启 TUN 的共同前提。
按 macOS 版本查找授权入口
在 macOS 13、14 中,可先检查「系统设置」→「隐私与安全性」底部是否存在被阻止的系统软件或扩展提示,并查看「网络」中的 VPN 或过滤器项目。macOS 15 可检查「系统设置」→「通用」→「登录项与扩展」→「网络扩展」,VPN 配置则在系统设置的「VPN」页面查看。具体项目是否出现,取决于客户端的实现和安装进度。
- 先关闭其他 VPN、其他代理客户端的 TUN,以及可能修改路由的测试工具。
- 在当前客户端中安装其文档要求的辅助服务,核对系统认证窗口中的程序名称。
- 开启 TUN,处理此次操作直接触发的配置或扩展请求;系统要求重启时再重启。
- 查看客户端日志,区分权限不足、接口创建失败和路由冲突,不要只看开关是否变亮。
受单位管理的 Mac 可能通过设备管理策略限制扩展或 VPN 配置。这种情况应联系管理员,而不是降低启动安全性或停用系统完整性保护。正常安装这类客户端,不应把关闭这些系统保护作为通用前置步骤。
钥匙串反复弹窗:检查密码、应用身份与项目权限
典型钥匙串窗口会写明「某应用想要使用储存在钥匙串中的机密信息」,并显示具体项目名称。这与安装辅助工具时的「允许此操作」认证框不同。先读清楚请求内容,再决定使用「允许一次」「始终允许」或拒绝。
登录钥匙串密码可能与当前登录密码不同
正常情况下,登录钥匙串会在登录账户时自动解锁。通过账户恢复或其他管理员重设登录密码后,旧钥匙串可能仍使用旧密码。此时反复输入新的登录密码也可能失败。通过「聚焦搜索」打开「钥匙串访问」,检查「登录」钥匙串是否锁定,再判断是否需要使用旧密码解锁。
若已不知道旧密码,不要为消除弹窗直接重置钥匙串。重置可能使旧钥匙串内保存的密码、证书或令牌无法继续访问;应先阅读系统提示,确认备份和账号恢复方式,再决定如何处理。
更新后应用身份变化,可能触发重新确认
更换发布渠道、从其他分支迁移、使用不同签名的构建,或在多个路径运行同名应用,都可能使已有访问授权不再适用。外观和名称相同,不代表系统识别到的代码身份相同。
- 退出所有同类客户端,只保留「应用程序」中的一个副本运行。
- 在「钥匙串访问」中按弹窗显示的完整项目名搜索,不要批量删除名称含 Clash 的项目。
- 打开对应项目的详情;对于提供「访问控制」选项的密码项目,检查允许访问的应用是否指向旧副本。
- 确认当前应用和该凭据确有关系后,再在系统弹窗中授予访问;不要改成允许所有应用访问。
授权后仍打不开网页:验证端口、代理与 TUN 日志
应用能够启动、钥匙串不再弹窗,只说明安装或凭据问题得到处理,不代表代理链路已经可用。应把内核监听、本地代理入口、节点连接和系统接管分开验证。
用明确端口测试本地入口
假设客户端配置明确显示 mixed-port: 7890,可以使用下面的命令。7890 只是此处示例,不是每个客户端的固定端口;实际端口应以当前生效配置为准。
lsof -nP -iTCP:7890 -sTCP:LISTEN
scutil --proxy
curl -I --connect-timeout 10 --max-time 20 \
--proxy http://127.0.0.1:7890 https://example.com/
- 没有监听记录:检查内核是否启动、配置是否解析成功,以及端口是否改成其他数值。
- 监听进程属于旧客户端:正常退出旧进程,再启动当前客户端,不要直接结束不认识的系统进程。
- 显式代理测试收到 HTTP 响应:说明这次请求能够经过本地入口,但不保证所有网站或所有规则都正常。
- 显式代理可用,浏览器仍失败:检查当前网络服务的系统代理、浏览器自身代理策略与 DNS 设置。
scutil --proxy 用于查看系统代理状态;单独使用 TUN 时没有 HTTP 代理条目也可能正常。测试 TUN 时,应查看日志中的接口、路由和 DNS 错误,再发起不带 --proxy 的请求。一个 utun 接口的存在不能证明 Clash 已接管流量,因为系统服务和其他 VPN 也会创建此类接口。
退出与回退:恢复联网后再继续排查
遇到断网时,按「关闭 TUN → 关闭系统代理 → 正常退出客户端」的顺序操作。若客户端已经崩溃,可在「系统设置」→「网络」→ 当前 Wi-Fi 或以太网服务 →「详细信息」→「代理」中检查是否残留指向 127.0.0.1 的设置,只移除本次客户端写入的项目。
再检查系统「VPN」页面是否仍有本次客户端启用的连接。不要删除单位配置、其他 VPN 的网络扩展或自行安装的证书。网络恢复后,重新打开客户端,先验证系统代理,再单独测试 TUN,避免同时改变多个条件而失去判断依据。
需要反馈问题时,提供 macOS 版本、芯片架构、客户端与内核版本、错误出现时间,以及隐藏敏感信息后的日志。把「首次启动失败」「辅助服务安装失败」「钥匙串访问被拒绝」「TUN 路由失败」明确分开,通常比反复重新安装更有助于定位原因。