0

双方向 SSL (HTTPS) 経由で f5 BigIP サーバーに接続しようとすると、iOS クライアントで奇妙なエラーが発生します。クライアントは、サーバーがクライアント証明書を必要としない場合にのみ、証明書を介してサーバーを検証できます。 SSL ネゴシエーション中。サーバーとクライアント証明書に署名したルート CA の証明書は、トラステッド アンカー証明書リストに既に含まれています。

私が試みた各テストの手順と、SSL ネゴシエーションの結果は次のとおりです。

  1. サーバーはクライアント証明書を必要とせず、クライアントはサーバー証明書を検証します (一方向 ssl: クライアント -> サーバー)
    • クライアントがサーバー証明書を検証 (パス)
    • クライアントはその証明書をサーバーに提供します (オフ - サーバーでは必要ありません)
    • 接続が確立され、サーバーはクライアント アクセスを許可します
  2. サーバーにはクライアント証明書が必要で、クライアントはサーバー証明書を検証します (双方向 SSL: クライアント <-> サーバー)
    • クライアントがサーバー証明書を検証する (FAIL!!)
    • 他に何も起こらない
  3. サーバーはクライアント証明書を必要とし、クライアントは任意のサーバーを信頼済みとして受け入れます (一方向 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」であり、機密情報が危険にさらされる可能性があります。

同じ情報で追加のメッセージが表示されますが、次のエラーが指定されています: NSErrorFailingURLStringKeyNSErrorFailingURLKeyNSUnderlyingError、およびNSURLErrorFailingURLPeerTrustErrorKey.

双方向 SSL と一方向 SSL で異なるサーバー証明書が必要だとは思いませんか?

前もって感謝します!

4

1 に答える 1

0

問題は、f5 サーバーの iRule にクライアント要求があったことです。iRule のこの部分を削除し、リクエストをクライアント SSL プロファイルに追加しました。これは iOS クライアントで動作するように見えます。つまり、私がテストしたすべてのブラウザーは、要求を行う方法 (iRule またはクライアント SSL プロファイル) のいずれかで動作するため、おそらく iOS コードに奇妙な点があることを意味します。iOS アプリは、クライアント SSL プロファイルで要求を行う場合にのみ機能します。

于 2013-10-29T16:47:59.913 に答える