我的目标: 在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的意图。
这有效,但存在一些挑战:
这导致了一些问题:
如果您需要任何澄清,请告诉我。
答案 0 :(得分:6)
您无法直接安装它,因为非系统应用程序无法访问密钥存储区。在ICS上,有一个用于此KeyChain.createInstallIntent()
的API,它将启动一个系统对话框,询问用户是否要安装证书。在ICS之前,您可以通过直接使用组件名称启动安装意图来实现相同的目的(这可能会也可能不适用于所有设备)。浏览浏览器实际上是一种做同样事情的迂回方式。
关于你的问题:
startActivityForResult()
时收到回电。更新:Android 4.3具有WifiEnterpriseConfig,它们都会在系统凭据存储中创建配置文件并安装密钥和证书。您只需要CHANGE_WIFI_STATE
权限。
答案 1 :(得分:0)
我正在寻找同样的......至于你的问题,@ Nikolay:
您无法指定/强制使用名称。你为什么关心实际的名字?
EAP配置文件需要已安装CA的名称。如果查看第4部分中的示例,可以指定:
final String ENTERPRISE_CA_CERT = "";
在该示例中,配置文件不使用CA名称,但其他EAP配置文件可能就是这种情况。
答案 2 :(得分:0)
我目前正在寻求解决同样的问题。我发现的最好的事情是KeyChain.choosePrivateKeyAlias()允许用户选择用于SSL的证书。从那里,您可以检索别名并将其传递给企业wifi配置。