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

标签 iphone cocoa https certificate verify

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

最佳答案

如果您尝试使用无效证书连接到服务器(例如,它是自签名的、过期的、具有错误的主机等)。因此,您实际上不需要自己进行任何验证,因为这一切都为您处理。

如果您确实希望/需要在 UI 中显示 SSL 证书摘要,则需要从 NSURLConnection 下拉一层并使用低级 CFNetwork API 代替。一旦您的 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 中保存的摘要可能足以满足你的目的。

关于iphone - 如何在 Cocoa Touch 中验证网站证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1251117/

相关文章:

iphone - QLPreviewController NavigationBar setTranslucent 属性不起作用

iphone - 在 iPhone 旋转时缩放图像以适合屏幕

ios - 无法从 Dropbox 中删除文件(从 iPhone 应用程序)

objective-c - Xcode:将 Cocoa 应用程序目标添加到命令行工具

cocoa - Web View 到 PDF 文档

cocoa - 使用任何 Mac OS X 应用程序中的 CUPS 将过滤器/后端编程为 'Print to PDF'

ios - 在 iOS 9 中禁用应用内浏览器的 ATS?

android - ios 应用程序中的 Revmob - 如何判断用户是否安装了应用程序

c# - TLS 连接握手失败

http - nginx:如何在仍然通过 http 提供一个目录的同时重定向到 https?