如何在不更改代码的情况下强制android应用程序使用安全SSL/TLS连接而不是http?

如何在不更改代码的情况下强制android应用程序使用安全SSL/TLS连接而不是http?,android,ssl,https,Android,Ssl,Https,我面临的挑战是如何在不重写代码的情况下将使用HTTP连接的android应用程序转换为HTTPS连接 在没有根访问权限的设备上实现上述挑战的可用选项有哪些?如果它总是连接到您控制下的已知端点,您可以在目标服务器端实现重定向,如果是Apache服务器,可能会出现类似mod_rewrite的情况。任何依赖服务器端重定向(从HTTP到HTTPS)的解决方案都容易受到MITM攻击(请参阅) 如果此应用程序中的地址是可配置的,只需将其更改为使用您的HTTPS URL即可 否则,您当然可以使用服务器端重定向

我面临的挑战是如何在不重写代码的情况下将使用HTTP连接的android应用程序转换为HTTPS连接


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

如果它总是连接到您控制下的已知端点,您可以在目标服务器端实现重定向,如果是Apache服务器,可能会出现类似mod_rewrite的情况。

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

如果此应用程序中的地址是可配置的,只需将其更改为使用您的HTTPS URL即可


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

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

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


如果应用程序不是您的,但您可以拥有代码-这是最好的方式。

是的,它总是连接到一个已知的端点,由我使用Apache server控制…您能更具体地说明服务器端的更改内容/方法吗?有很多材料-例如,尝试此链接,可以找到安全问题的有用链接,但正如OP所述,他不能改变客户app@RobCowell,我不确定http://URL是否在应用程序中硬编码,或者是否可以配置。如果它是硬编码的,那么没有太多的选项是MITM证明的。一种可能的方法是实现一个透明代理,该代理将更改设备本身上的URL,但我怀疑这在不根设备的情况下是可能的。感谢您的评论。不幸的是,URL在应用程序中是硬编码的,在某些情况下,我不会有应用程序的代码。祝你好运。您可能可以使用VPN保护连接,但用户必须在应用程序运行时运行VPN。您还需要确保VPN端点和HTTPS之间的连接是安全的。我们的案例中没有VPN,只有一个android/iphone设备和一个支持HTTPS的Web服务器。谢谢您的评论。你是对的,应用程序不是我的,在这种情况下没有代码,也没有VPN。在这种情况下,如何在没有根访问权限的设备上对其进行隧道/重新路由?您不能直接在设备上进行隧道/重新路由。你需要在你的路由器/接入点上设置隧道——android不会知道它是隧道OK。那么,在这种情况下,android应用程序如何知道它必须通过服务器验证,并使用存储在证书中的私钥/公钥对数据进行加密呢?它不会知道。该应用程序本身是否必须支持安全连接,或者您可以告诉它使用由Android处理的VPN连接(以便操作系统进行身份验证)。