我在我的项目中使用 ASIHTTP,我需要支持带或不带客户端证书的 SSL 连接。在我看来,在 SSL 握手期间可能有四种情况:
案例 A:服务器提供一个受信任的证书,但不要求客户端提供一个(例如https://www.gmail.com,...)
案例 B:服务器提供一个自签名证书,但不要求客户端提供一个(例如https://www.cacert.org/images/cacert4.png)
案例 C:服务器提供一个受信任的证书并要求客户端提供一个
案例 D:服务器提供一个自签名证书并要求客户端提供一个
ASIHTTP 毫无问题地支持案例 A。
案例 C 也受支持,但我必须在开始请求之前提供 SecIdentityRef:
[request setClientCertificateIdentity:identity];
不支持其他情况(没有完全关闭 CFStream 级别的证书验证,我不想这样做)。
对我来说,我希望 ASIHTTP 的正常行为是向代表询问案例 B、C 和 D。对于案例 B 和 D,应要求代表信任或不信任服务器证书(就像在 Web 浏览器中完成的那样) . 对于案例 C 和 D,还应要求代表提供证书。
ASIHTTP 基于 CFStream 连接。有没有办法配置 CFStream 以便它从案例 B、C 和 D 返回不同的错误?然后,检测这些错误并使用正确的回调通知委托?
谢谢你的帮助。