2011-01-05 74 views
1

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

请参阅从PayPal网站所附图片:

enter image description here

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

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

回答

0

如果您的目标是提高性能,您希望在SSL握手完成之前检查证书。为连接协商对称密钥是建立连接的计算成本很高的部分。

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

我有两个想法: 1 - 看看你的服务器可以使用哪些SSL库,以及他们会允许你做什么约束。通常SSL库将让你:

  • 限制当前有效期

到受信任的证书连接

  • 检查一些较高端库也会让你做一个OCSP检查或CRL检查来验证当前状态。

    大多数图书馆都会让你连接并编写自己的验证 - 但是你必须真正深入细节并弄清它是否允许你在连接建立之前或之后进行验证。

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

    这很大程度上取决于您的环境 - #2并不是环境中众多连接的胜利 - 您将无法将连接重新利用以足以存储信息。

  • 1

    对于ASIHTTPRequest,答案是否定的。

    对于NSNURLConnection,有可能使用

    - (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
    

    你可以看到我的回答类似的问题,这里阅读这些值:ASIHTTPRequest retrieve server certificate

    这种技术被称为SSL钢钉。它使SSL连接更强大。你可以在这里阅读更多:https://www.isecpartners.com/blog/2013/february/ssl-pinning-on-ios.aspx