2

我在我的项目中使用 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 返回不同的错误?然后,检测这些错误并使用正确的回调通知委托?

谢谢你的帮助。

4

0 回答 0