情况如下:
我正在开发一个允许自动管理网络连接的应用程序。用户可以通过应用程序配置WiFi / VPN配置文件,应用程序将管理它们与这些配置文件的连接。
这一切都相当直接(好吧,VPN方面需要一些反思hackery),除非我到了管理这些连接到需要证书身份验证的网络的点。麻烦的是,这些网络基本上都使用自签名证书,而且就我在android中遇到的情况而言,在我看来,这些证书需要可以从根证书存储区访问。我试图创建一个私有的应用程序密钥库并在那里安装证书,但据我所知,Android的VPN和VPN段无法访问此。
有没有办法在应用程序密钥库中安装所选证书,根据此密钥库创建配置文件,然后将完成的配置文件发送到android wifi / vpn管理器以允许预配置连接?
这似乎应该是可能的,但我还没有设法聪明到让它发挥作用。
更新
当我尝试创建wifi和vpn配置时,我试图在本地应用程序密钥库中引用已安装的证书。看来,一旦将配置推送到操作系统,它就无法找到它们。根据我的理解,一旦安装了证书,它就会成为通用密钥库的一部分,无论是在应用程序还是操作系统级别。
我必须继续访问内部证书,所以我不能将它们推送到SD卡。即使我将它们推送到SD卡,我也无法要求用户手动安装证书,我需要在后台处理这个以简化配置。我一直在挖掘源头,并没有找到任何明显的解决方案,但我只是希望有人偶然发现了这个,我只是错过了它。
提前感谢您的帮助!
更新2
对于那些仍然对如何执行此操作感兴趣的人,以下是您需要查看的包/类。
com.android.certinstaller。* android.security.Credentials
通过一些挖掘,您可以找到构建意图的适当方法来安装所需的证书。
另外,作为附注,如果尚未在设备上设置凭证存储密码,则您启动安装证书的初始意图将仅提示用户提供凭证存储密码。证书将不会安装。可能有办法解决这个问题,但我还没有找到它。
答案 0 :(得分:6)
这不仅仅是一个问题,请考虑拆分它。你究竟尝试了什么? VPN和WiFi不使用常规Java KeyStore
,通过密钥库守护程序访问密钥和证书。实际密钥和证书存储为/data/misc/keystore
中的文件。 AFAIK的API不是公开的,但您可以启动证书安装程序意图,它会扫描SD卡以获取证书和PFX文件,并安装它们(这可能也不公开)。设置 - >位置和安全性 - >'从SD卡安装'做同样的事情。
简而言之,我认为你不能仅使用SDK API来做你想要做的事情,你必须查看源代码,并在下一个Android版本中承担应用程序破解的风险。
更新:安装程序意图现在在ICS中公开,您可以通过KeyChain类访问它们。