在Android上以编程方式安装/访问用于VPN/WIFI的Certs

Kee*_*ner 4 security vpn android certificate wifi

情况如下:

我正在开发一个允许自动管理网络连接的应用程序.用户可以通过应用程序配置WiFi/VPN配置文件,应用程序将管理它们与这些配置文件的连接.

这一切都相当直接(好吧,VPN方面需要一些反思hackery),除非我到了管理这些连接到需要证书身份验证的网络的点.麻烦的是,这些网络基本上都使用自签名证书,而且就我在android中遇到的情况而言,在我看来,这些证书需要可以从根证书存储区访问.我试图创建一个私有的应用程序密钥库并在那里安装证书,但据我所知,Android的VPN和VPN段无法访问此.

有没有办法在应用程序密钥库中安装所选证书,基于此密钥库创建配置文件,然后将完成的配置文件发送到android wifi/vpn管理器以允许预配置连接?

这似乎应该是可能的,但我还没有设法聪明到让它工作.

更新:

当我尝试创建wifi和vpn配置时,我试图在本地应用程序密钥库中引用已安装的证书.看来,一旦将配置推送到操作系统,它就无法找到它们.根据我的理解,一旦安装了证书,它就会成为应用程序或操作系统级别的通用密钥库的一部分.

我必须继续访问内部证书,所以我不能将它们推送到SD卡.即使我将它们推送到SD卡,我也无法要求用户手动安装证书,我需要在后台处理这个以简化配置.我一直在挖掘源头,并没有找到任何明显的解决方案,但我只是希望有人偶然发现了这个,我只是错过了它.

在此先感谢您的帮助!

更新2

对于那些仍然对如何执行此操作感兴趣的人,以下是您需要查看的包/类.

com.android.certinstaller.*android.security.Credentials

通过一些挖掘,您可以找到构建意图的适当方法来安装所需的证书.

此外,作为旁注,如果尚未在设备上设置凭证存储密码,则您启动安装证书的初始意图将仅提示用户提供凭证存储密码.证书将不会安装.可能有办法解决这个问题,但我还没有找到它.

Nik*_*kov 6

这不仅仅是一个问题,考虑拆分它.你究竟尝试了什么?VPN和WiFi不使用常规Java KeyStore,通过密钥库守护程序访问密钥和证书.实际的密钥和证书存储为文件/data/misc/keystore.AFAIK的API不是公开的,但您可以启动证书安装程序意图,它会扫描SD卡以获取证书和PFX文件,并安装它们(这可能也不公开).设置 - >位置和安全 - >'从SD卡安装'做同样的事情.

简而言之,我认为你不能仅使用SDK API来做你想要做的事情,你必须查看源代码,并在下一个Android版本中承担你的应用程序破解的风险.

更新:安装程序意图现在在ICS中公开,您可以通过KeyChain类访问它们.