通过向 kCFStreamPropertySSLSettings 字典添加常用的 kCFStreamSSLValidatesCertificateChain、kCFStreamSSLAllowsAnyRoot 等 - 我可以使服务器和客户端身份验证工作。
但是我看不出如何才能得到更细粒度的;即
- 检测从未见过的服务器/CA 证书 - 并将接受度上报给用户。
- 根据一个狭窄的信任列表验证我所连接的服务器的证书(例如,在之前的连接中获悉的证书)。
即我正在寻找的是 1) MacOSX 上的 SSLSetTrustedRoots() 之类的东西和 2) kCFStreamErrorDomainSSL 中的错误/域回调之类的东西(例如 errSSLPeerCertUnknown)——在 ipad/iphone 4.2.1 上似乎没有定义/可访问。
或者我错过了什么?或者我需要对回调做一些明确的事情吗?欣赏示例(AdvancedURLConnections 示例不太适用 - 我有一个原始 (IRC) 套接字)。
谢谢,
数据。
最佳答案
将 kCFStreamSSLValidatesCertificateChain 设置为 kBooleanFalse 并使用 API 手动验证证书。
具体来说,使用
SecTrustCreateWithCertificates
通过您获得的证书
CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates);
然后,你可以使用
SecTrustSetAnchorCertificates
最后调用
SecTrustEvaluate
关于iphone - iOS - 管理 SSL 连接上的可信根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4418423/