Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 移动应用程序中的客户端SSL证书有多安全?_Android_Ios_Security_Ssl_Client Certificates - Fatal编程技术网

Android 移动应用程序中的客户端SSL证书有多安全?

Android 移动应用程序中的客户端SSL证书有多安全?,android,ios,security,ssl,client-certificates,Android,Ios,Security,Ssl,Client Certificates,我想在我的Android/iOS应用程序和我的互联网可访问后端服务之间进行安全通信,所以我正在研究HTTPS/SSL 如果我创建自签名证书,然后将客户端证书放入应用程序中,并使后端服务需要该客户端证书,这真的安全吗 这就是我为什么这么问。似乎可以通过询问.apk来“黑客”客户端证书。客户端证书只是一个字符串常量,对吗?这意味着任何人都可以使用客户端证书访问我的后端.apk(和iOS等效)是否足够不透明以防止发现客户端证书??您是否通过SSL使用证书进行客户端身份验证?这对这个问题并不重要。攻击者

我想在我的Android/iOS应用程序和我的互联网可访问后端服务之间进行安全通信,所以我正在研究HTTPS/SSL

如果我创建自签名证书,然后将客户端证书放入应用程序中,并使后端服务需要该客户端证书,这真的安全吗


这就是我为什么这么问。似乎可以通过询问.apk来“黑客”客户端证书。客户端证书只是一个字符串常量,对吗?这意味着任何人都可以使用客户端证书访问我的后端.apk(和iOS等效)是否足够不透明以防止发现客户端证书?

您是否通过SSL使用证书进行客户端身份验证?这对这个问题并不重要。攻击者可以访问应用程序中存储的任何私钥。每个客户机都应该有自己的证书和密钥对,以防止大规模泄露。您的服务器还应实施保护,确保受损客户端不能只请求任何内容

这适用于任何身份验证方案。如果你嵌入密码、API密钥、解密密钥等等。应假定设备上的任何内容都是可访问的

证书增加的安全性部分来自于不存在暴力。如果您为每个客户端选择用户名/密码路径,则可以猜测密码。API键也是如此(尽管它们更长更难)。对于证书,这是一种完全不同的攻击类型,也是一个相当困难的问题

但是,最重要的是,后端服务不应该允许应用程序做它通常不会做的事情


现在,在处理证书时,您将遇到一系列其他问题。您可能希望使用自签名CA证书对每个客户端证书进行签名。根据您的使用情况,管理该CA证书可能会有问题。您是要动态生成这些客户端证书,还是自己手动生成?意思是,这是一个百万人可以下载的应用程序,而你需要一个自动生成它们的系统吗?或者这是您个人将处理生成证书的私人/内部应用程序?

证书是无害的。它是需要保护的私钥,它只与设备本身一样安全,不安全。在应用程序中分发证书和私钥只意味着拥有应用程序的任何人都拥有该密钥,因此它不会为您提供任何安全性。我认为您需要某种安装后注册步骤。

可以访问和复制APK,因此在其中放入任何内容都没有帮助。有必要在安装后激活并可能将证书绑定到设备。例如,可以通过将设备的IMEI放入其中一个证书扩展,并通过应用程序将IMEI与证书一起传递(或者,更好的做法是,在身份验证和建立安全通道后传递IMEI)来完成绑定

通常情况下,客户端SSL证书存储在密钥库(Android中的BKS格式)中,密钥库作为资源包含在APK中。密钥存储库通过密码进行加密和保护。因此,该客户端证书不能轻易地从APK中提取,因为它是以加密形式存储的

现在…你怎么处理密码?这是问题的关键,你有两个选择

如果希望应用程序能够与服务器通信(以便能够访问证书),而无需用户交互,则需要将密码嵌入到应用程序中,然后,是的,攻击者可以对代码进行反向工程以找到密码,获取密钥库,然后解密以恢复证书。您可以应用模糊代码等技术,使攻击者更难做到这一点,但这只会减慢速度,而不会阻止它

您可以选择在应用程序每次与服务器通信时提示用户输入密码,并使用该密码解密密钥库(或询问应用程序何时启动并将证书缓存一段时间)。这里的优点是,如果有人对您的APK进行反向工程,他们将发现加密的密钥库而没有密码,因此您的证书是安全的。缺点是让用户提供密码


哪种方法最好?这完全取决于您关注的数据的敏感性和您愿意接受的风险水平。只有你才能回答这个问题。

丹尼尔·吉拉莫特,我总结了一些技巧:

  • 拆分服务器端密钥。使SSL密钥的密码短语成为从webservice获取的应用程序XOR字符串中的字符串的结果
  • 通过调用一些应用程序函数,而不是硬编码字符串来创建应用程序中的字符串
  • 拒绝在应用程序运行时跟踪它,以避免在调用私钥解密时有人获取最终密码短语。参考:

如果有人有其他想法,我很想听到更多。

你说的“只使用普通的ol'可信证书”是什么意思?你就是这么做的,不是吗?我把问题改了。告诉我是否更清楚。别忘了我们有一个网站来回答这类问题。这里的主题是,如果有人想要标记……请注意:如果用户是攻击者,提示输入密码并不能解决问题。私钥是加密的,而不是证书。除非私钥也泄漏,否则泄漏证书是没有风险的。Daniel的回答不是真正的答案,更多的是评论,在某种程度上也是你的…“我认为你需要某种安装后注册步骤…”-另请参阅。它被广泛采用,但从未被标准化。彼得·古特曼(Peter Gutmann)最近从思科(Cisco)手中接过了火炬,并试图将其标准化