【问题标题】:How do I force an android app to use secure SSL/TLS connection instead of http without changing code?如何在不更改代码的情况下强制 android 应用使用安全 SSL/TLS 连接而不是 http?
【发布时间】:2012-11-20 17:36:15
【问题描述】:

我面临的挑战是将使用 HTTP 连接的 android 应用程序转换为 HTTPS 连接而不重写代码?

在没有 root 访问权限的设备上实现上述挑战有哪些可用选项?

【问题讨论】:

    标签: android ssl https


    【解决方案1】:

    任何依赖服务器端重定向(从 HTTP 到 HTTPS)的解决方案都容易受到 MITM 攻击(请参阅this answer)。

    如果此应用中的地址是可配置的,只需将它们更改为使用您的 HTTPS URL。

    否则,您当然可以使用服务器端重定向来稍微降低风险,但这并不能防止降级 MITM 攻击(这种情况可能会发生,在使用移动设备时可能更是如此)。

    【讨论】:

    • 安全问题的有用链接,但正如 OP 所述,他无法更改客户端应用程序
    • @RobCowell,我不确定http:// URL 是否在应用程序中进行了硬编码,或者它是否可以配置。如果它是硬编码的,那么就没有多少可以防 MITM 的选项了。一种可能的方法是实现一个透明代理,该代理会更改设备本身的 URL,但我怀疑在不植根设备的情况下这是可能的。
    • 感谢 cmets。不幸的是,url 在应用程序中是硬编码的,在某些情况下我不会有应用程序的代码。
    • 运气不好。您也许可以通过 VPN 保护连接,但用户必须在应用程序运行时运行它。您还需要确保 VPN 端点和 HTTPS 之间的连接是安全的。
    • 在我们的案例中没有 VPN,只有一个 android/iphone 设备和一个支持 https 的网络服务器。
    【解决方案2】:

    如果它始终连接到您控制的已知端点,您可以在目标服务器端实现一些东西来重定向,如果它是一个 Apache 服务器,也许像 mod_rewrite 之类的东西。

    【讨论】:

    • 是的,它总是连接到一个已知的端点,在我的控制下使用 Apache 服务器...您能更具体地说明在服务器端更改什么/如何更改吗?
    • 周围有很多材料 - 试试这个,例如cyberciti.biz/tips/…
    【解决方案3】:

    没有什么可重写的。您基本上将您的http:// 链接更改为https://,仅此而已。当端点的证书是自签名或由一些不太流行的CA签名时可能会出现一些问题,但是您可以轻松地将您的HttpClient替换为this one,将颁发者的CA添加到您的应用程序中,基本上只需一屏代码即可完成。

    如果应用程序不是您的并且您没有代码,那么您可以尝试通过隧道使其通过您的接入点访问网络,这将通过 ssh 隧道或 VPN 或其他任何方式透明地重新路由数据包。

    如果应用不是您的,但您可以拥有代码 - 恕我直言,这是最好的选择。

    【讨论】:

    • 感谢您的 cmets。你是正确的,应用程序不是我的,在这种情况下没有代码,也没有 VPN。鉴于这种情况,我如何在没有 root 访问权限的设备上隧道/重新路由它?
    • 您不能直接在设备上。您需要在路由器/接入点上设置隧道 - android 不会知道它是隧道
    • 好的。那么在这种情况下,android 应用程序如何知道它必须通过服务器进行身份验证并使用存储在证书中的私钥/公钥对加密数据?
    • 不会。该应用程序是否必须自己支持安全连接,或者您可以告诉它使用由 Android 处理的 VPN 连接(因此操作系统将进行身份验证)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2022-09-29
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    相关资源
    最近更新 更多