如何在Cocoa Touch中验证网站证书?

dbo*_*tha 6 iphone https cocoa certificate verify

我目前使用NSURLConnection打开与Web服务器的https连接.一切都按预期工作,我能够检索我所追求的页面内容.证书由VeriSign颁发,我认为NSURLConnection在某种程度上做了一些工作来验证证书的真实性吗?如果我通过移动safari连接到同一个网站,它将从证书中提取,并在导航栏中显示组织(网站).是否可能在Cocoa Touch中提取这些相同的细节,因为我也想将它们呈现给用户?还会根据该证书验证服务器的主机名是否足够合理以假设网站是合法的?

Nat*_*ies 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]; 
}
Run Code Online (Sandbox Code Playgroud)

data如果要访问证书的各种属性,则需要解码保留的信息,但保留的摘要description可能足以满足您的需要.