我现在开的HTTPS连接使用NSURLConnection的Web服务器。 一切正常,因为它应该和我能够检索页面内容我之后。 该证书是由VeriSign发出,我以为NSURLConnection的做了一些工作,以验证该证书在一定程度上的真实性? 如果我通过移动Safari浏览器连接到同一个网站它会从证书中提取,并在导航栏中显示的组织(网站)。 难道是可能要提取可可触摸这些相同的细节,因为我太想他们呈现给用户? 也将验证服务器的主机名反对该证书是不够合理的假设网站是合法的?
Answer 1:
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
可能会为你的目的就足够了。
文章来源: How to verify a website certificate in Cocoa Touch?