Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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中存储用于证书固定的密钥库密码_Android_Security_Ssl_Ssl Certificate_Certificate Pinning - Fatal编程技术网

在Android中存储用于证书固定的密钥库密码

在Android中存储用于证书固定的密钥库密码,android,security,ssl,ssl-certificate,certificate-pinning,Android,Security,Ssl,Ssl Certificate,Certificate Pinning,我最近开始学习Android应用程序的安全性,并希望实现证书固定。通过谷歌搜索找到了一些有用的信息,但我无意中发现存储了包含服务器证书的密钥库密码 由于我不能相信Android文件系统会对我的密钥库密码保密,主要是因为任何有根用户最终都能将其挖出来,我开始怀疑是否真的需要安全地存储此密钥库密码,因为此密钥库只包含我服务器的SSL证书,这是公开的 如果有人可以反编译我的APK并查看密钥库密码,我想不出任何恶意攻击,因为攻击者将无法修改应用程序的任何代码,因此无法更改,例如,目标服务器IP,甚至修改

我最近开始学习Android应用程序的安全性,并希望实现证书固定。通过谷歌搜索找到了一些有用的信息,但我无意中发现存储了包含服务器证书的密钥库密码

由于我不能相信Android文件系统会对我的密钥库密码保密,主要是因为任何有根用户最终都能将其挖出来,我开始怀疑是否真的需要安全地存储此密钥库密码,因为此密钥库只包含我服务器的SSL证书,这是公开的

如果有人可以反编译我的
APK
并查看密钥库密码,我想不出任何恶意攻击,因为攻击者将无法修改应用程序的任何代码,因此无法更改,例如,目标服务器
IP
,甚至修改密钥库,使用其他恶意证书切换我的证书,再加上攻击者可能对目标
IP
所做的更改,将使应用程序能够针对任何恶意服务器工作()

我在Android中找到了一个很好的证书固定示例,但遗憾的是,作者没有费心安全地存储Passbrow,因为它是在
MainActivity
中硬编码的

因此,我的总结问题是:如果密钥库只有一个预定的公共
SSL
服务器证书,那么是否真的需要保护密钥库密码?

从我所做的研究中,我发现OP解决了在Android代码上传递
null
作为密码的可能性。也许我可以这样做,将密钥库密码存储在我的服务器上,而不是将其打包到Android应用程序中


另外,在我的谷歌搜索中,我发现了一些非常有用的文章,这些文章对将来研究这个问题的人来说可能很有趣:

  • 警告任何有根用户都可以挖掘存储在此处的信息)

进度更新 -如果在生成密钥库密码时设置了密钥库密码,则将
null
作为密钥库密码传递(如上所述,这是其中一个选项),这将导致密钥库绕过:请求仍然会被发送,而自定义密钥库什么也不做。不会引发任何异常或其他情况,它的工作方式就像您没有设置任何自定义密钥库一样

 KeyStore trustStore = KeyStore.getInstance("BKS");
 trustStore.load(keyStoreInputStreamFromResources, null);

由于公共证书是公开的,我认为对其进行密码保护没有任何价值。@Commonware
openssl
工具要求您对密钥库进行密码保护,这就是为什么我担心这个问题,我不确定对这个保护密钥库的简单密码进行编码(因为它根本不需要保密)是否是一种不好的做法。需要通过安全审计,但不确定他们是否同意……那么也许你应该和安全审计人员讨论一下。