检查SSL属性ASIHTTPRequest

时间:2011-01-05 09:51:41

标签: security ssl asihttprequest

我被问到是否可以在连接期间检查SSL证书的某​​些属性以提高性能。

请参阅PayPal网站附图:

enter image description here

有没有办法读取这些值?如果我能通过浏览器浏览网络来获取它们,我可以通过使用NSURLConnection,NSData或(最重要的)ASIHTTPRequest连接到服务器来读取它们吗?

当然,我正在处理的证书是有效的,而不是自签名/不可信的。这种验证是否确实提高了应用程序的安全性?

2 个答案:

答案 0 :(得分:1)

对于ASIHTTPRequest,答案是否定的。

对于NSNURLConnection,可以使用

读取这些值
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge

您可以在此处查看我对类似问题的回答:ASIHTTPRequest retrieve server certificate

这种技术称为SSL Pinning。它使SSL连接更强大。您可以在此处阅读更多内容:https://www.isecpartners.com/blog/2013/february/ssl-pinning-on-ios.aspx

答案 1 :(得分:0)

如果您的目标是提高性能,则需要在SSL握手完成之前检查证书。协商连接的对称密钥是建立连接的计算上昂贵的部分。

在建立SSL连接后,您可以检查证书中的任何内容。从性能角度来看,技巧是进入一种状态,在握手完成之前你可以反弹连接。

我有两个想法: 1 - 查看您可以在服务器中使用哪些SSL库,以及它们允许您执行哪些约束。通常SSL库会让你:

  • 限制与受信任证书的连接
  • 检查当前有效性

一些高端库还允许您进行OCSP检查或CRL检查以验证当前状态。

大多数图书馆都会允许您加入并编写自己的验证 - 但您必须深入了解详细信息,并确定是否允许您在建立连接之前或之后进行验证。

2 - SSL性能改进的另一个技巧是设置服务器,以便它们重用以前会话中的共享密钥。当相同的两点重新建立连接时,这消除了设置成本。如果您没有安全存储空间,则会使您的系统面临风险。但如果您正确保护密钥存储区,它可能是一个可接受的交易。

这在很大程度上取决于您的环境 - #2并非在具有大量连接的环境中获胜 - 您将无法充分回收连接以证明存储信息的合理性。