如何从 Android 钥匙串中检索已安装的 X509 证书?
How to retrieve installed X509 certificate from Android keychain?
我使用以下代码将 X509 证书安装到 andorid 钥匙串中:
Intent installIntent = KeyChain.createInstallIntent();
installIntent.putExtra(KeyChain.EXTRA_NAME, "My certificate");
installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificate.getEncoded());
startActivityForResult(installIntent, 2);
我祝酒时提到 "My Certificate is installed"。现在,当我尝试使用以下代码取回它时:
try {
KeyStore ks = KeyStore.getInstance("AndroidCAStore");
if (ks != null) {
ks.load(null, null);
Enumeration aliases = ks.aliases();
List<String> alliasesNames = Collections.list(aliases);
for (String name : alliasesNames) {
if (ks.getCertificate(name) instanceof X509Certificate) {
X509Certificate certificate = (X509Certificate) ks.getCertificate(name);
if (certificate.getIssuerDN().getName().contains("My Certificate")) {
Log.d("CERTEXIST", "**********User Cert " + certificate.getIssuerDN().getName());
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (java.security.cert.CertificateException e) {
e.printStackTrace();
}
我在这里找不到安装的 x509。我还可以在设备安全设置的用户证书中看到已安装的 x509 证书。
此外,当我提示用户使用以下方式为服务器通信选择证书时:
KeyChain.choosePrivateKeyAlias(loginActivity, this,
new String[]{}, null, null, -1, null);
}
提示没有显示我的证书。我是 Android 中的证书和钥匙串的新手。
我想知道如何检索保存的 x509 证书并提示用户 select 该证书。
感谢任何帮助。
KeyChain.choosePrivateKeyAlias
启动一个提示用户 select 私钥的别名,但是 你安装的是证书,而不是私钥,所以你的证书将不在.
KeyChain.createInstallIntent()
可用于安装X509证书或PKCS#12文件,包含私钥和证书。如果需要安装私钥+证书进行认证需要提供p12文件
byte pkcs12Data[] = ...
installIntent.putExtra(KeyChain._PKCS12, pkcs12Data);
我使用以下代码将 X509 证书安装到 andorid 钥匙串中:
Intent installIntent = KeyChain.createInstallIntent();
installIntent.putExtra(KeyChain.EXTRA_NAME, "My certificate");
installIntent.putExtra(KeyChain.EXTRA_CERTIFICATE, certificate.getEncoded());
startActivityForResult(installIntent, 2);
我祝酒时提到 "My Certificate is installed"。现在,当我尝试使用以下代码取回它时:
try {
KeyStore ks = KeyStore.getInstance("AndroidCAStore");
if (ks != null) {
ks.load(null, null);
Enumeration aliases = ks.aliases();
List<String> alliasesNames = Collections.list(aliases);
for (String name : alliasesNames) {
if (ks.getCertificate(name) instanceof X509Certificate) {
X509Certificate certificate = (X509Certificate) ks.getCertificate(name);
if (certificate.getIssuerDN().getName().contains("My Certificate")) {
Log.d("CERTEXIST", "**********User Cert " + certificate.getIssuerDN().getName());
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (java.security.cert.CertificateException e) {
e.printStackTrace();
}
我在这里找不到安装的 x509。我还可以在设备安全设置的用户证书中看到已安装的 x509 证书。
此外,当我提示用户使用以下方式为服务器通信选择证书时:
KeyChain.choosePrivateKeyAlias(loginActivity, this,
new String[]{}, null, null, -1, null);
}
提示没有显示我的证书。我是 Android 中的证书和钥匙串的新手。
我想知道如何检索保存的 x509 证书并提示用户 select 该证书。
感谢任何帮助。
KeyChain.choosePrivateKeyAlias
启动一个提示用户 select 私钥的别名,但是 你安装的是证书,而不是私钥,所以你的证书将不在.
KeyChain.createInstallIntent()
可用于安装X509证书或PKCS#12文件,包含私钥和证书。如果需要安装私钥+证书进行认证需要提供p12文件
byte pkcs12Data[] = ...
installIntent.putExtra(KeyChain._PKCS12, pkcs12Data);