【发布时间】:2011-11-13 22:22:15
【问题描述】:
情况如下:
我正在开发一个允许自动管理网络连接的应用程序。用户可以通过应用程序配置 WiFi/VPN 配置文件,应用程序将管理他们与这些配置文件的连接。
这一切都相当简单(嗯,VPN 方面需要一些反射黑客),除非我要管理这些与需要证书身份验证的网络的连接。问题是这些网络大体上都使用自签名证书,而且与我在 android 中遇到的情况相去甚远,在我看来,这些证书需要可以从根证书存储中访问。我试图创建一个私有应用程序密钥库并在那里安装证书,但据我所知,android 的 WiFi 和 VPN 段无法访问它。
有没有办法在应用程序密钥库中安装选定的证书,基于此密钥库创建配置文件,然后将完成的配置文件发送到 android wifi/vpn 管理器以允许预配置的连接?
这似乎应该是可能的,但我还没有足够聪明地让它发挥作用。
更新:
当我尝试创建 wifi 和 vpn 配置时,我尝试引用本地应用程序密钥库中已安装的证书。看来,一旦将配置推送到操作系统,就无法找到它们。据我了解,一旦安装了证书,它就会成为通用密钥库的一部分,无论是在应用程序还是操作系统级别。
我必须保留对内部证书的访问权限,因此我无法将它们推送到 SD 卡。即使我将它们推送到 SD 卡,我也无法要求用户手动安装证书,我需要在后台处理它以简化配置。我一直在挖掘源代码,但没有找到任何明显的解决方案,但我只是希望有人之前偶然发现过这个问题,而我只是错过了它。
提前感谢您的帮助!
更新 2
对于那些仍然对如何执行此操作感兴趣的人,这里是您需要查看的包/类。
com.android.certinstaller.* android.security.Credentials
稍加挖掘,您就可以找到合适的方法来构建安装所需证书的意图。
另外,作为旁注,如果尚未在设备上设置凭据存储密码,则您安装证书的初始意图只会提示用户提供凭据存储密码。不会安装证书。可能有办法解决这个问题,但我还没有找到。
【问题讨论】:
-
关于密钥库,我认为应用程序无法访问 VPN 为其证书访问的根密钥库。我认为您能做的最好的事情就是将用户引导到可以导入证书的设置屏幕。至于自动化 VPN 设置和连接,我假设您使用的是内部 VpnManager 类。您是否在 Android 3.x 上测试过您的代码?我在 2.3 上取得了成功,但相同的代码在平板电脑 (3.x) 上完全失败 - 仅供参考。
-
@Mike 您说得对,因为应用程序无权访问根密钥库。我试图通过 VPN 找到解决此问题的方法,因为我几乎必须在我的应用程序中推出自己的 VPN 管理器,以反映内部管理器的功能。我基本上构建了 VPN 配置并将它们作为包裹扔给 Android VPN 服务。在这个包裹中,证书仅通过别名引用,所以这有点麻烦。此外,对于 Android 3.X,我注意到我的 VPN 代码都不起作用。尝试连接时它只是失败了,我还没有找到解决方法。
标签: android security certificate wifi vpn