【问题标题】:HTTPS connection to exactly one site (Android)HTTPS 连接到一个站点 (Android)
【发布时间】:2010-01-18 17:55:12
【问题描述】:

我正在为 Android 平台创建一个应用程序,它将仅使用 https 连接一个站点。即使使用有效的 SSL 证书,它也不能连接到任何其他站点,这一点很重要。我希望它能够抵抗每一种形式的重定向(例如,伪装成我需要连接的网站)或其他“攻击”。不幸的是,我在 Android 中找不到任何关于 SSL 的好教程……你知道吗?我将不胜感激一些链接或建议。或者你能给我一些代码sn-ps吗?我的应用已准备好使用 HttpURLConnection 或 HttpClient - 我选择哪个路径没有区别。

提前谢谢你:)

【问题讨论】:

    标签: android ssl


    【解决方案1】:

    硬编码 URL 不能解决这个问题?

    【讨论】:

    • URL 是硬编码的 :) 我只是担心一些未知的、讨厌的网络可能会将 http 请求发送到不同的 ip(不知道这是否真的可能)。问题是我只想接受一个证书,但我不知道如何适当地实例化 HttpClient...
    • 我不认为我跟随。您想让您的设备与一个地址建立 https 连接。硬编码 URL/或 IP 将解决它。请说明您希望“讨厌的网络”如何从设备和您的应用程序内部发出 http 请求。
    【解决方案2】:

    如果您真的那么偏执,那么硬编码 URL 是不安全的,因为当您的 DNS 服务器中毒时,URL 可能会指向不同的 IP。不过这些不太可能发生。

    硬编码 IP 有助于避免此问题,因为无需 DNS 名称解析即可直接访问服务器。

    【讨论】:

      【解决方案3】:

      我想指出,提问者的偏执是有道理的。假设该站点具有由有效证书颁发机构签署的证书(并且应用程序会对其进行检查),他应该通常是安全的,但正如最近的历史所证明的那样,CA 并非完全可靠。

      仅对 URL 进行硬编码并不能防止中间人攻击。如果您知道您只会连接到一个站点,则可以将该站点的证书或公钥硬编码到您的应用程序中,这一过程称为证书固定。这样可以确保除非有人获得该站点私钥的副本(在这种情况下,无论如何您都已经沉没了),否则您可以确保您正在与该站点进行通信,因为只有该站点私钥的持有者才能发送消息可以用网站的公钥解密。供参考:

      实施:
      https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#Public_Key_Checks

      一般信息:
      http://www.netspi.com/blog/2013/04/01/certificate-pinning-in-a-mobile-application/

      妄想症是处理安全问题时的标准程序,并且有充分的理由。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-24
        • 2016-04-16
        • 2023-03-03
        • 1970-01-01
        • 2014-04-11
        • 1970-01-01
        相关资源
        最近更新 更多