【问题标题】:How to programmatically install a CA Certificate (for EAP WiFi configuration) in Android?如何在 Android 中以编程方式安装 CA 证书(用于 EAP WiFi 配置)?
【发布时间】:2012-02-19 22:28:05
【问题描述】:

我的目标: 以编程方式在 Android 中创建 EAP WiFi 配置 - 包括 CA 证书。

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

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

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

这甚至可能吗? (在这种情况下,生根不是一种选择。) 如果有,怎么做?

其他信息...

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

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


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

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

这可行,但存在一些挑战:

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

这引出了几个问题:

  • 在我的应用中,有没有办法为用户通过浏览器安装的证书强制命名?
  • 从我的应用程序中,有什么方法可以知道证书安装何时完成,然后将焦点返回给我的应用程序?

如果您需要任何说明,请告诉我。

【问题讨论】:

    标签: android x509certificate android-wifi


    【解决方案1】:

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

    至于你的问题:

    1. 您不能指定/强制使用名称。你为什么在乎真实的名字?
    2. 不是真正通过浏览器。如果您使用系统意图,您可以返回您的活动,如果您使用startActivityForResult(),则会收到回调。

    更新:Android 4.3 具有WifiEnterpriseConfig,它既可以创建配置文件,又可以在系统凭据存储中安装密钥和证书。你只需要CHANGE_WIFI_STATE 权限。

    【讨论】:

    • 嗨 Nikolay,我在这里阅读了您的 Keystore 帖子:- nelenkov.blogspot.in/2012/05/… 我可以使用它以编程方式将 Ca 证书从我的应用程序传递到 WifiConfiguration 类。 WifiConfiguration 类将引用我的应用程序密钥库而不是系统密钥库
    【解决方案2】:

    我目前正在寻求解决相同的问题。我发现的最好的事情是 KeyChain.choosePrivateKeyAlias() 允许用户选择用于 SSL 的证书。从那里您可以检索别名并将其传递给企业 wifi 配置。

    【讨论】:

      【解决方案3】:

      我正在寻找相同的...对于你的问题,@Nikolay:

      您不能指定/强制使用名称。你为什么在乎真实的名字?

      EAP 配置文件需要已安装 CA 的名称。如果您查看第 4 部分中的示例,您可以指定:

      final String ENTERPRISE_CA_CERT = "";
      

      在示例中,配置文件不使用 CA 名称,但其他 EAP 配置文件可能就是这种情况。

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 2011-11-13
        • 1970-01-01
        • 2011-05-21
        • 2020-06-12
        • 2012-07-24
        • 1970-01-01
        • 2022-12-13
        相关资源
        最近更新 更多