6

現在、NSURLConnection を使用して Web サーバーへの https 接続を開いています。すべてが正常に機能し、目的のページ コンテンツを取得できます。証明書は VeriSign によって発行され、NSURLConnection は証明書の信頼性をある程度検証するために何らかの作業を行うと思いますか? モバイル サファリ経由で同じ Web サイトに接続すると、証明書から抽出され、(Web サイトの) 組織がナビゲーション バーに表示されます。私もユーザーに提示したいので、Cocoa Touch でこれらと同じ詳細を抽出することは可能でしょうか? また、その証明書に対してサーバーのホスト名を検証することは、ウェブサイトが正当であると仮定するのに十分合理的でしょうか?

4

1 に答える 1

5

NSURLConnectionNSURLErrorDomain無効な証明書 (自己署名、期限切れ、ホストが間違っているなど) を使用してサーバーに接続しようとすると、エラー ( ) が返されます。そのため、すべてが処理されるため、実際に自分で確認を行う必要はありません。

UI に SSL 証明書の概要を本当に表示する必要がある場合は、レイヤーをドロップダウンして、代わりにNSURLConnection低レベルCFNetworkAPI を使用する必要があります。CFReadStreamRef状態のを取得したらkCFStreamEventEndEncountered、次のことができるはずです (ストリーム ハンドルが と呼ばれると仮定しますreadStream)。

NSArray* certificates = [(NSArray*)CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates) autorelease]; 
if ([certificates count] > 0) { 
  SecCertificateRef certificate = (SecCertificateRef)[certificates objectAtIndex:0]; 
  NSString* description = [(NSString*)SecCertificateCopySubjectSummary(certificate) autorelease]; 
  NSData* data = [(NSData*)SecCertificateCopyData(certificate) autorelease]; 
}

data証明書のさまざまなプロパティにアクセスする場合は、保持されている情報をデコードする必要がありますが、目的には保持されている要約descriptionで十分な場合があります。

于 2009-08-10T07:47:56.947 に答える