Запрос ASIHTTP: как обращаться с сертификатом SSL
Я использую ASIHTTP в своем проекте, и мне нужно поддерживать SSL-соединения с сертификатом клиента или без него. На мой взгляд, во время рукопожатия SSL возможны четыре случая:
случай A: сервер представляет доверенный сертификат, но не просит клиента предоставить его (например, https://www.gmail.com/, ...)
случай B: сервер представляет самозаверяющий сертификат, но не просит клиента предоставить его (например, https://www.cacert.org/images/cacert4.png)
case C: сервер представляет доверенный сертификат и просит клиента представить его
вариант D: сервер представляет самозаверяющий сертификат и просит клиента предоставить его
ASIHTTP поддерживает случай A без проблем.
Случай C также поддерживается, но я должен дать SecIdentityRef перед началом запроса:
[request setClientCertificateIdentity:identity];
Другие случаи не поддерживаются (без полного отключения проверки сертификата на уровне CFStream, что я не хочу делать).
Для меня нормальное поведение, которое я хочу от ASIHTTP, - это попросить делегата для случаев B, C и D. Для случаев B и D делегата следует попросить доверять сертификату сервера или нет (как это делается в веб-браузере)., Для случаев C и D делегата также следует попросить предоставить сертификат.
ASIHTTP основан на соединении CFStream. Есть ли способ настроить CFStream так, чтобы он возвращал разные ошибки в случаях B, C и D? И затем, обнаруживает эти ошибки и уведомляет делегата с правильным обратным вызовом?
Спасибо за вашу помощь.