双方向 SSL (HTTPS) 経由で f5 BigIP サーバーに接続しようとすると、iOS クライアントで奇妙なエラーが発生します。クライアントは、サーバーがクライアント証明書を必要としない場合にのみ、証明書を介してサーバーを検証できます。 SSL ネゴシエーション中。サーバーとクライアント証明書に署名したルート CA の証明書は、トラステッド アンカー証明書リストに既に含まれています。
私が試みた各テストの手順と、SSL ネゴシエーションの結果は次のとおりです。
- サーバーはクライアント証明書を必要とせず、クライアントはサーバー証明書を検証します (一方向 ssl: クライアント -> サーバー)
- クライアントがサーバー証明書を検証 (パス)
- クライアントはその証明書をサーバーに提供します (オフ - サーバーでは必要ありません)
- 接続が確立され、サーバーはクライアント アクセスを許可します
- サーバーにはクライアント証明書が必要で、クライアントはサーバー証明書を検証します (双方向 SSL: クライアント <-> サーバー)
- クライアントがサーバー証明書を検証する (FAIL!!)
- 他に何も起こらない
- サーバーはクライアント証明書を必要とし、クライアントは任意のサーバーを信頼済みとして受け入れます (一方向 SSL: クライアント <- サーバー)
- クライアントはサーバー証明書を検証しません (
setAllowsAnyHTTPSCertificate:YES
- テスト目的でのみ行われます) - クライアントはその証明書をサーバーに提供します (パス)
- 接続が確立され、サーバーはクライアント アクセスを許可します
- クライアントはサーバー証明書を検証しません (
ケース 1 と 2 の間では、サーバーのみがクライアント証明書を要求するように変更され (それにより双方向 SSL が有効になります)、クライアントは両方のケースでサーバー証明書を検証します。ケース 2 と 3 の間では、クライアントはすべてのサーバー証明書を受け入れるように変更されますが、どちらの場合もサーバーはクライアント証明書を必要とします。
そのため、一方向 SSL はどちらの方向にもしか実現できず、双方向 SSL は実現できないようです。クライアントがサーバーを検証する最初のステップとして、サーバーがクライアント証明書を要求する前に発生する必要があるため、毎回同じ結果が生成されるため、これは奇妙です。テスト ケース 2 から得られるエラーは次のとおりです。
このサーバーの証明書は無効です。「server.myexample.com」になりすましたサーバーに接続している可能性があり、機密情報が危険にさらされる可能性があります。https://server.myexample.com/serviceの取得中にエラーが発生しました: エラー Domain=NSURLErrorDomain Code=-1202 "このサーバーの証明書は無効です。「server.myexample. com」であり、機密情報が危険にさらされる可能性があります。
同じ情報で追加のメッセージが表示されますが、次のエラーが指定されています: NSErrorFailingURLStringKey
、NSErrorFailingURLKey
、NSUnderlyingError
、およびNSURLErrorFailingURLPeerTrustErrorKey
.
双方向 SSL と一方向 SSL で異なるサーバー証明書が必要だとは思いませんか?
前もって感謝します!