我们正在构建一个使用证书透明度来验证SSL连接的iOS SDK。这最初是在信息中使用ATS实现的。但是我们遇到了一个问题:
用户可以安装配置文件并完全信任根证书,这将允许他们覆盖这些检查。Burpsuite也能做到这一点。
我们发现的解决方法是使用URLSessionDelegate
,并在评估后检查SecTrustCopyResult(_: SecTrust)
对kSecTrustCertificateTransparency
的结果,确保值为true
。
这里的问题是这个键只从iOS 13开始出现。我们应该如何在早期版本的iOS中实现这一点?(我们目前支持iOS 11.0及以上版本)
参考:https://developer.apple.com/forums/thread/688302
使用iOS 11.4 (r.74226999和r. 30743827)设备上的本地CT日志执行证书透明度检查现在已经过时,因此在iOS 11上使用NSRequiresCertificateTransparency的ATS密钥执行额外验证时,这些验证不再保证工作。
关于:
这里的问题是这个键只在iOS 13以后出现。
kSecTrustCertificateTransparency和NSRequiresCertificateTransparency在ios9 +中可用。
我仍然建议您查看来自URLSessionDelegate的SecTrust对象中的证书链。这应该能够告诉你这里使用的是什么证书,如果另一方使用证书来执行代理操作,你应该能够在这里看到。