【问题标题】:Check SSL properties ASIHTTPRequest检查 SSL 属性 ASIHTTPRequest
【发布时间】:2013-12-18 03:57:58
【问题描述】:

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

请参见 PayPal 网站的附图:

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

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

【问题讨论】:

    标签: security ssl asihttprequest


    【解决方案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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      大多数库都允许您加入并编写自己的验证 - 但您必须真正深入研究细节并弄清楚它是否允许您在建立连接之前或之后进行验证。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2020-05-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多