didReceiveAuthenticationChallenge
を実装しているNSURLConnectionDataDelegateの使用を検討してください。クライアントがiOSでクライアント証明書を提供しない場合、SSL接続は成功しますか?
デリゲートが認証チャレンジを受信し、protectionSpaceがNSURLAuthenticationMethodClientCertificate
である場合、提供する代わりに、次の操作を行います。
[challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge];
サーバーには2つのオプションがあります。
それが証明書を要求したい場合、それは単に接続を終了することができますとiOS NSURLConnectionはエラー
NSURLErrorClientCertificateRequired
が発生します。サーバーが続行したい場合は、接続を切断せずに代理人に
didReceiveAuthenticationChallenge
という別の呼び出しを受け取る必要があります。
この仮説を具体的に検証することはできませんでした。私は、iOS NSURLスタックも同様に得ることができると思います。しかし、私は仮説についてある種の検証を探しています。
はい、私はSSLの仕組みを知っています。しかし、SSL/TLSの非常に特殊な構成について言及していますが、クライアント認証はサーバーによって実際には必要とされない場合があります。このように構成できる多数の認証アプライアンス/ DMZコントローラがあります。私が言っていることは、有効なクライアント証明書を必要としないサーバーのコンテキスト(たとえ要求しても)であり、サーバーが要求を継続すると予想されます。 NSURLConnectionはエラーで失敗することはありません。 –
誰かここに答えがあります。このリンクを確認してください: http://stackoverflow.com/questions/933331/how-to-use-nsurlconnection-to-connect-with-ssl-for-an-untrusted-cert?rq=1 –
そのリンクはクライアントが検証できないサーバーID証明書。私が記述しているこのシナリオは、多かれ少なかれ、別の方法です。サーバーがSSLハンドシェイク中にクライアント証明書を要求する場合(httpsの標準ではありません)。設定に基づいて、httpsサーバーは、クライアントがクライアント証明書を提供しなかったか、またはクライアントが期限切れの証明書または証明できない証明書を提供したにもかかわらず、トランザクションを続行することを選択できます。 –