5

ssl証明書(可能であれば+ chain)を取得して、識別名を表示し、それがEV証明書であるかどうかを判断できるようにしたいと思います。(証明書ポリシーを介したEV証明書の検出(ウィキペディア

私が見たところ、証明書が自己署名されている場合にのみ、証明書の詳細が表示されます。

CFNetworkなどの下位層を使用して証明書を取得することは可能ですか?

4

1 に答える 1

10

macnetworkprog.lists.apple.comメーリング リスト http://web.archiveorange.com/archive/v/x0fiWEI9emJFc36DY0UPを介して、開発者フォーラムのいくつかの場所について言及しました

デフォルトの TLS セキュリティ ポリシーで十分ですが、このプロセスに参加したい場合は (iPhone OS 3.0 以降および Mac OS X 10.6 で) 、認証を探して-connection:canAuthenticateAgainstProtectionSpace:および デリゲート コールバックを実装することで実行できます。方法。-connection:didReceiveAuthenticationChallenge:NSURLAuthenticationMethodServerTrust

これをする:

  1. -connection:canAuthenticateAgainstProtectionSpace:デリゲート コールバックを実装します。

  2. 実装において、保護スペースの認証方式が である場合、次のNSURLAuthenticationMethodServerTrust2 つの選択肢があります。

    2a. に戻りNO、デフォルトの TLS アルゴリズムを開始します。

    2b. Return YES。この場合、-connection:didReceiveAuthenticationChallenge:デリゲート コールバックが呼び出されます。

その決定を下す前に証明書を調べたい場合は-serverTrust、保護スペース オブジェクトを呼び出して信頼オブジェクトを取得し、SecTrust APIを使用して証明書チェーンを取得できます。

  1. パス 2b を使用すると、-connection:didReceiveAuthenticationChallenge:デリゲート コールバックが呼び出されます。次の 2 つの選択肢があります。

    3a. -cancelAuthenticationChallenge:チャレンジの送信者を呼び出して、接続を拒否します。

    3b. -useCredential:forAuthenticationChallenge:チャレンジの送信者を呼び出して接続を許可します。クレデンシャルを取得するには、 に電話して-[NSURLCredential initWithTrust:]ください。ここでどの信頼オブジェクトを渡すかは実際には問題ではありません。保護スペースからのもので十分です。

これを同期的に行う必要はありません。チャレンジをラッチしてデリゲート コールバックから戻るだけで、将来のある時点でチャレンジを解決できます。

于 2011-02-25T14:19:50.290 に答える