2017-09-06 135 views
1

我在寻找2天内解决问题,但我找不到它。如何在android中使用ssl时增加安全性volley

我的问题:

我已经安装在服务器上的Comodo SSL/TLS证书,我使用的Android凌空库连接到服务器,到现在为止我是使用只是“https://开头...”为我的网址和连接通过https连接到我的服务器没有问题。 但我最近在我的手机上安装了“数据包捕获”android应用程序,默认设置和没有固定的手机无法从我的应用程序向服务器检索发布/响应信息,但是当您使用固定电话时,数据包捕获应用程序要求你在手机上安装一个自定义证书,以便它可以检索甚至ssl/tls连接,起初我虽然是在开玩笑,但是在安装证书之后,它显示了用于连接到我的服务器的全部信息... 我非常担心我的应用程序的安全性,黑客可以使用该捕获应用程序来知道要将什么发送到我的服务器,并将他的硬币编号设置为例如100000 :(

请给我一种方法让我的应用程序连接更安全 *我没有在ap上安装自定义证书p,因为服务器证书是可信的并且可以正常使用。

对不起我的英语不好打字:)

编辑: 感谢@ Ch4t4r的想法......我搜查,发现这对钉扎的公共密钥,它是如此之大,这里是GitHub的链接: https://github.com/faruktoptas/volley-public-key-pinning

希望它可以帮助别人有同样的问题

+0

这看起来好像跟SSL没有任何关系。您的服务器的API将始终可见(或多或少)。为什么简单的请求可以设置硬币编号?也许你的服务器应该认证/限制请求。 – jHilscher

+0

@jHilscher实际上并不那么简单,但我很依赖ssl来保护通信,例如,你可以嗅探instagram请求吗?我需要这样的东西 – niafara

回答

2

该应用程序的工作原理如下(总结)方式:

  1. 您的应用程序试图建立
  2. 该应用程序捕获请求并将其转发
  3. 该应用从服务器获取到的答案,取代它的证书

这是一个典型的人为你的服务器的连接因为您使用的应用程序的证书是可信的,所以中间人攻击是有效的。您无法阻止有根的用户破坏您的加密。


你唯一能做的就是默默无闻的安全。尝试对您的值进行编码(补充值,或者使用存储在您的应用中的密钥对其进行加密)或发送整个请求的散列。这将锁定大多数人(非技术人员),但是没有绝对的办法阻止用户以这种方式作弊。你可以做的就是使用一次性令牌(盐的种类)来编码你的重要价值。混淆你的源代码也会有所帮助。但是,再一次,没有绝对的办法,这只是在用户的方式铺设石块,甚至可以作弊。这大大增加了如何做到这一点所需的时间。

我不会浪费到多少时间就可以了,这里的原因:

  • Android设备的大约20-25%植根(根据一些较旧的数据。我猜想它实际上更少)
  • 一些有根的设备是测试或存储设备(Kiosk模式);让它成为所有根设备的15%
  • 如果其他有根的用户中有50%知道该应用程序(它不会那么高),我们低至所有Android用户的8.5%
  • 使用安全通过默默无闻的原则,只有技术高超的用户才能够弄清楚如何作弊。如果这种情况适用于所有用户的20%(再次,这是一个非常高的数字),我们占所有Android用户的1.7%。
  • 考虑到并非所有这些用户都可能使用您的应用,有些人可能根本不在乎,我会将能够欺骗和使用您的应用的用户百分比设置为最大为。


更激烈的方法是阻止所有根用户。
编辑:另一个答案表明你可以使用公钥固定。请记住,并非所有用户都倾向于在发布新版本时立即进行更新,否则,如果您的应用程序不这样做,那么您的应用程序就会无效。因此它有一个小风险。

+0

感谢您的回答ch4t4r,你说的事情是真实的,但如果我是黑客,那么我绝对有一个根深蒂固的手机,虽然当我只是一个开发人员,我有一个根深蒂固的手机认为是什么做一个黑客有! ,所以你不知道是否有办法强制使用主要和可信任的证书,而不是其他任何证书?我想知道是否有一种方法可以在安装不受信任的应用程序,vpn或证书时停止发送数据? – niafara

+0

同样,您可以阻止所有根用户。但相信我,没有黑客会专门针对你的应用。我的计算或多或少准确。如果你想阻止根深蒂固的用户进行作弊,可以通过默默无闻的方法或者开发一种智能算法来检测不合理的分数。 – Ch4t4r

+0

我编辑了我的评论上面,是的,我可以识别他们,但它的第二个目标,首先我想停止这个......你知道我刚打开那个“数据包捕捉”的应用程序,然后试图嗅探instagram,然后instagram失败了,在捕获包应用程序中显示...你知道我想要这样的 – niafara

1

我不确定您的应用程序编写了哪种编程语言,但您可以查看证书锁定以防止这些攻击。您的代码会在发送任何请求之前检查SSL证书,如果值不匹配,则可能导致应用失败并显示错误消息。

https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning

+0

这就是我正在寻找的东西,我正在写一个android应用程序,使用java语言的android工作室...你能给我一些Java代码来检查你所说的ssl证书吗? – niafara