6

我目前使用 NSURLConnection 打开到 Web 服务器的 https 连接。一切正常,我能够检索我所追求的页面内容。证书由 VeriSign 颁发,我假设 NSURLConnection 在某种程度上验证了证书的真实性?如果我通过移动 Safari 连接到同一个网站,它将从证书中提取,并在导航栏中显示(网站的)组织。是否可以在 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 回答