我目前使用NSURLConnection打开一个到Web服务器的https连接。一切都按原样运行,我可以检索我之后的页面内容。证书由VeriSign颁发,我假定NSURLConnection在某种程度上做了一些工作来验证证书的真实性。如果我通过移动Safari浏览器连接到同一网站,它将从证书中提取,并在导航栏中显示组织(网站的)。是否可能在Cocoa Touch中提取这些相同的细节,因为我也想将它们呈现给用户?还要根据该证书验证服务器的主机名是否足够合理以承担网站的合法性?如何验证Cocoa Touch中的网站证书?
6
A
回答
5
NSURLConnection
如果您尝试连接到具有无效证书的服务器(例如,它是自签名的,过期的,具有错误的主机等),则会出现错误(NSURLErrorDomain
)。所以你实际上不需要自己做任何验证,因为它都是为你处理的。
如果您确实需要/需要在您的用户界面中显示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
举行的总结可能已足够您的目的。
相关问题
- 1. 验证远程网站的SSL证书
- 2. 如何验证我的网站是否使用SHA256RSA SSL证书?
- 3. 网站HTTPS证书
- 4. 验证网站的凭证
- 5. 如何验证C中的X509证书
- 6. 如何验证Perl中的网站URL?
- 7. 带SSL证书的网站
- 8. Cocoa-Touch:如何在输入验证后更改视图?
- 9. 验证证书
- 10. 如何在python中验证SSL证书?
- 11. WCF中的证书验证
- 12. 如何使网站SSL证书有效?
- 13. 如何抓取网站证书?
- 14. https免费证书网站
- 15. SSL证书1个网站
- 16. 网站证书问题
- 17. 网站PKSC#11智能卡验证和SSL客户端证书
- 18. 如何在Python中验证/验证X509证书信任链?
- 19. 如何验证我的网站?
- 20. 如何验证网站的所有权?
- 21. 如何验证网站的所有权?
- 22. 证书链验证
- 23. stunnel证书验证
- 24. 与验证证书
- 25. 如何在Windows上禁用LDAP验证的证书验证?
- 26. 在Cocoa中验证数据
- 27. 如何使用html5验证器验证php网站
- 28. Thawte证书中的“签名中的证书无法验证”
- 29. 网站的特定验证
- 30. AOL OpenID的网站验证
感谢Nathan的帮助,放下了一层像你这样的窍门!虽然不是一个真正的问题,你的NSDictionary * cast不应该是NSArray *吗? – dbotha
你能发布代码示例Deon吗? – Pripyat
@Deon正确的你!我更新了示例代码。 –