我在我的项目中使用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返回不同的错误?然后,检测这些错误并通过正确的回调通知代理?
感谢您的帮助。