相关疑难解决方法(0)

如何在Android上以编程方式安装CA证书而无需用户交互

我正在尝试安装证书而不提示用户.我知道这不是好习惯,但这就是PM想要的.

使用KeyChain.createInstallIntent(),我可以通过调用让Android启动证书安装对话框startActivity.但是,当我通过意图时sendBroadcast,没有任何反应.出于安全考虑,平台可能不支持此功能吗?

String CERT_FILE = Environment.getExternalStorageDirectory() + "/test/IAT.crt";
Intent intent = KeyChain.createInstallIntent();
try {
    FileInputStream certIs = new FileInputStream(CERT_FILE);
    byte [] cert = new byte[(int)certFile.length()];
    certIs.read(cert);
    X509Certificate x509 = X509Certificate.getInstance(cert);
    intent.putExtra(KeyChain.EXTRA_CERTIFICATE, x509.getEncoded()); 
    intent.putExtra(KeyChain.EXTRA_NAME, "IAT Cert");
    EapActivity.this.startActivityForResult(intent, 0);  // this works but shows UI
    EapActivity.this.sendBroadcast(intent);  // this doesn't install cert
} catch (IOException e) {
Run Code Online (Sandbox Code Playgroud)

android x509certificate android-intent android-wifi

18
推荐指数
3
解决办法
2万
查看次数

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

我的目标:在Android programmitcally中创建一个EAP WiFi配置 - 包括CA证书.

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

我发现了一个非常有用的链接,允许我在这里创建和保存EAP WiFi配置: 如何在Android中以编程方式创建和读​​取WEP/EAP WiFi配置?

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

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

附加信息...

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

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


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

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

这有效但有一些挑战:

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

这导致了一些问题:

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

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

android x509certificate android-wifi

7
推荐指数
1
解决办法
6340
查看次数