我试图要求用户安装证书,但我只想在VPN和应用凭证使用而不是Wi-Fi上进行。
该对话框显示了用户可以选择的两个选项,如here
中所示到目前为止,我找不到任何会强制VPN和应用程序选项仅显示的选项。
我这样调用证书安装:
Intent clientCertInstall = KeyChain.createInstallIntent();
clientCertInstall.putExtra(KeyChain.EXTRA_CERTIFICATE, __CERT_ENCODING__);
clientCertInstall.putExtra(KeyChain.EXTRA_NAME, __NAME__);
activity.startActivityForResult(clientCertInstall, __CODE__);
此外,如果用户安装证书,应用程序将收到有关活动的信息,但意图将为null,结果代码为-1,告诉我用户是否选择了WIFI或VPN和应用程序。
onActivityResult(int requestCode, int resultCode, Intent data)
最后,如果用户通过Wi-Fi安装证书,我无法在密钥库别名下找到它,如下所示:
KeyStore ks = KeyStore.getInstance("AndroidCAStore");
Eumeration aliases = ks.aliases();
while (aliases.hasMoreElements()) {
String alias = (String) aliases.nextElement();
X509Certificate cert = (X509Certificate) ks.getCertificate(alias);
BigInteger localCertSerialNumber = cert.getSerialNumber();
String localIssuerDN = cert.getIssuerX500Principal().getName();
BigInteger serial = new BigInteger(currentCertificateSerial);
if (installedCertSerialNumber.compareTo(localCertSerialNumber) == 0 && installedCertIssuerDn.equals(localIssuerDN)) {
//Should reach here but it does not when user installs certificate via Wi-Fi
}
}
我在这里做错了吗?