如何以编程方式在Android中安装CA证书(用于EAP WiFi配置)?

前端之家收集整理的这篇文章主要介绍了如何以编程方式在Android中安装CA证书(用于EAP WiFi配置)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的目标:
Android programmitcally中创建EAP WiFi配置 – 包括CA证书.

问题:
如何以编程方式安装CA证书(然后在EAP WiFi配置中引用该证书)?

我找到了一个非常有用的链接,允许我在这里创建和保存EAP WiFi配置:
How to programmatically create and read WEP/EAP WiFi configurations in Android?

但是,这假定您已在设备上安装了CA证书.我想在我的应用程序中安装证书 – 从应用程序中的资源,或从服务器发送.

这有可能吗? (在这种情况下,Rooting不是一个选项.)
如果是这样,怎么样?

附加信息…

我还找到了一种向KeyStore添加证书的方法
https://stackoverflow.com/a/4490543/1172101

但是,这专门用于创建安全套接字并通过HTTPS连接.我想使用WiFi证书.

不幸的是,我还没有找到一种以编程方式安装CA证书的方法 – 从应用程序中.

但是,可以通过Android中的Web浏览器安装证书.因此,解决方案(目前)是:
启动意图以在Web浏览器中打开直接转到CA证书的URL.

这有效但有一些挑战:

>用户必须为证书命名.这是一个挑战,因为我们正在添加WiFi配置程序.因此,我们必须要求用户为证书提供相同的名称.
>用户必须输入密码.如果他们没有设置密码,用户将创建一个并输入两次.如果他们设置了安全密码,则用户必须记住该密码并输入密码.
>假设用户成功完成了这些步骤,他就会挂在浏览器中.

这导致了一些问题:

>从我的应用程序,有没有办法强制用户通过浏览器安装的证书的名称
>从我的应用程序,有没有办法知道证书安装何时完成,然后重点回到我的应用程序?

如果您需要任何澄清,请告诉我.

解决方法

您无法直接安装它,因为非系统应用程序无权访问密钥库.在ICS上,有一个用于此KeyChain.createInstallIntent()的API,它将启动一个系统对话框,询问用户是否要安装证书.在pre-ICS上,您可以通过直接使用组件名称启动安装意图来实现相同的目的(这可能会也可能不适用于所有设备).浏览浏览器实际上是做同样事情的迂回方式.

至于你的问题:

>您无法指定/强制名称.你为什么关心实际的名字?
>不是真的通过浏览器.如果使用系统意图,则可以返回到您的活动,如果使用startActivityForResult(),则会收到回调.

更新:Android 4.3具有WifiEnterpriseConfig,它们都会创建配置文件并在系统凭据存储中安装密钥和证书.您只需要CHANGE_WIFI_STATE权限.

猜你在找的Android相关文章