我目前使用 NSURLConnection 打开到 Web 服务器的 https 连接。一切正常,我能够检索我想要的页面内容。该证书是由 VeriSign 颁发的,我假设 NSURLConnection 做了一些工作来在某种程度上验证证书的真实性?如果我通过移动 Safari 连接到同一网站,它会从证书中提取,并在导航栏中显示(网站的)组织。是否有可能在 Cocoa Touch 中提取这些相同的细节,因为我也想将它们呈现给用户?另外,根据该证书验证服务器的主机名是否足以合理地假设网站是合法的?
NSURLConnection
会给你一个错误(NSURLErrorDomain
)如果您尝试连接到具有无效证书的服务器(例如,它是自签名的、过期的、主机错误等)。所以你实际上不需要自己做任何验证,因为这一切都为你处理好了。
如果您确实想要/需要在 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
可能足以满足您的目的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)