在 Android (Java) 中创建并导入 PKCS12 证书
Create and Import PKCS12 Certificate In Android (Java)
我正在开发一个 Android 应用程序来处理客户端证书的创建和安装。除了使用 KeyChain.createInstallIntent()
函数将 PKCS12 证书导入 Android 之外,我已经设置并运行了所有内容。因为我需要处理 PKCS12 证书客户端的创建,所以我生成密钥并手动将它们导入 KeyStore,以便它们可以在 PKCS12 import/export 中使用。当尝试 "export" PKCS12 密钥库并将其导入主 Android 密钥库时,系统提示我使用 "Enter Password" 字段。根据下面的代码,它应该只是空字符串。我也尝试过将其设置为 "something",但它仍然拒绝我输入的任何密码。
应针对提供的代码片段做出的假设:
privateKey 是一个私钥
server.name 是一个字符串
CA 密钥已安装到主android 证书存储区
void importCertificateIntoAndroid(String certStr) throws CertificateException, KeyStoreException {
try {
KeyStore pk12KeyStore = KeyStore.getInstance("PKCS12");
pk12KeyStore.load(null, null);
ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(is);
pk12KeyStore.setKeyEntry(server.name, privateKey, "".toCharArray(), new Certificate[]{cert});
ByteArrayOutputStream os = new ByteArrayOutputStream();
pk12KeyStore.store(os, "".toCharArray());
Intent certInstallIntent = KeyChain.createInstallIntent();
certInstallIntent.putExtra(KeyChain.EXTRA_PKCS12, String.valueOf(os));
certInstallIntent.putExtra(KeyChain.EXTRA_KEY_ALIAS, server.name);
certInstallIntent.putExtra(KeyChain.EXTRA_NAME, server.name);
startActivity(certInstallIntent);
} catch (Exception e) {
Log.d(TAG, "help");
}
}
来晚了,问题出在
certInstallIntent.putExtra(KeyChain.EXTRA_PKCS12, String.valueOf(os));
您必须将 byte[] 设置为这个 extra。比如使用 'os.toByteArray()'.
我正在开发一个 Android 应用程序来处理客户端证书的创建和安装。除了使用 KeyChain.createInstallIntent()
函数将 PKCS12 证书导入 Android 之外,我已经设置并运行了所有内容。因为我需要处理 PKCS12 证书客户端的创建,所以我生成密钥并手动将它们导入 KeyStore,以便它们可以在 PKCS12 import/export 中使用。当尝试 "export" PKCS12 密钥库并将其导入主 Android 密钥库时,系统提示我使用 "Enter Password" 字段。根据下面的代码,它应该只是空字符串。我也尝试过将其设置为 "something",但它仍然拒绝我输入的任何密码。
应针对提供的代码片段做出的假设:
privateKey 是一个私钥
server.name 是一个字符串
CA 密钥已安装到主android 证书存储区
void importCertificateIntoAndroid(String certStr) throws CertificateException, KeyStoreException {
try {
KeyStore pk12KeyStore = KeyStore.getInstance("PKCS12");
pk12KeyStore.load(null, null);
ByteArrayInputStream is = new ByteArrayInputStream(certStr.getBytes());
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate cert = cf.generateCertificate(is);
pk12KeyStore.setKeyEntry(server.name, privateKey, "".toCharArray(), new Certificate[]{cert});
ByteArrayOutputStream os = new ByteArrayOutputStream();
pk12KeyStore.store(os, "".toCharArray());
Intent certInstallIntent = KeyChain.createInstallIntent();
certInstallIntent.putExtra(KeyChain.EXTRA_PKCS12, String.valueOf(os));
certInstallIntent.putExtra(KeyChain.EXTRA_KEY_ALIAS, server.name);
certInstallIntent.putExtra(KeyChain.EXTRA_NAME, server.name);
startActivity(certInstallIntent);
} catch (Exception e) {
Log.d(TAG, "help");
}
}
来晚了,问题出在
certInstallIntent.putExtra(KeyChain.EXTRA_PKCS12, String.valueOf(os));
您必须将 byte[] 设置为这个 extra。比如使用 'os.toByteArray()'.