在Android(Java)中创建和导入PKCS12证书

3
我正在开发一款Android应用程序,处理客户证书的创建和安装。除了使用KeyChain.createInstallIntent()函数导入PKCS12证书到Android之外,我已经设置并运行了所有内容。因为我需要在客户端生成PKCS12证书,所以我手动将密钥导入到密钥库中,以便可以在PKCS12导入/导出中使用。当尝试“导出”PKCS12密钥库并将其导入到主Android密钥库中时,会提示“输入密码”字段。根据下面的代码,它应该只是空字符串。我还尝试将其设置为“something”,但仍然拒绝我输入的任何密码。
假设提供的代码片段为: privateKey是一个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");
        }
    }
1个回答

2

有些晚了,但问题在于

certInstallIntent.putExtra(KeyChain.EXTRA_PKCS12, String.valueOf(os));

你需要将byte[]设置为这个额外的参数。就像使用'os.toByteArray()'一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接