你好,跟你说一下这个安全问题。
我用自己控制的服务器搭了一个自签名 HTTPS 测试地址,没有测试任何第三方服务器。
同一个地址,在 iPhone Safari 里会直接提示“此连接非私人连接”,因为证书不受系统信任。但是把完全相同的地址添加到 Clash/Hako 里却可以正常导入,而且测试 YAML 里的代理名称也正常显示出来了。
所以这个不是只看源码猜的,是在 iPhone 上实际复现成功了。
测试版本:
- Clash 1.0.6 (82)
- App 里显示的源码版本:9c06292b73d5683e9fb72c072b98868e0f1c212d
- Hako 内核:1.19.30
看了下现在仓库里的 ResourceDownloader.swift,处理 server trust challenge 时直接用了:
URLCredential(trust: trust)
completionHandler(.useCredential, credential)
但是没有看到 SecTrustEvaluateWithError 或系统默认的证书信任验证。
TV 目录里的 HakoTVNetwork.swift 好像也有类似处理。
正常情况下这里应该交给系统默认验证,例如:
completionHandler(.performDefaultHandling, nil)
我这边测试完成后,已经把测试服务器和端口关闭了。
你好,跟你说一下这个安全问题。
我用自己控制的服务器搭了一个自签名 HTTPS 测试地址,没有测试任何第三方服务器。
同一个地址,在 iPhone Safari 里会直接提示“此连接非私人连接”,因为证书不受系统信任。但是把完全相同的地址添加到 Clash/Hako 里却可以正常导入,而且测试 YAML 里的代理名称也正常显示出来了。
所以这个不是只看源码猜的,是在 iPhone 上实际复现成功了。
测试版本:
看了下现在仓库里的 ResourceDownloader.swift,处理 server trust challenge 时直接用了:
但是没有看到 SecTrustEvaluateWithError 或系统默认的证书信任验证。
TV 目录里的 HakoTVNetwork.swift 好像也有类似处理。
正常情况下这里应该交给系统默认验证,例如:
我这边测试完成后,已经把测试服务器和端口关闭了。