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

时间:2020-06-08 05:06:12

标签: java android client-certificates pkcs#12

我正在处理一个处理客户端证书创建和安装的Android应用。除了使用KeyChain.createInstallIntent()函数将PKCS12证书导入Android外,我已完成所有工作。因为我需要处理PKCS12证书客户端的创建,所以我正在生成密钥并将其手动导入到KeyStore中,以便可以在PKCS12导入/导出中使用它们。尝试“导出” PKCS12密钥库并将其导入到主要的Android密钥库时,系统会提示我“输入密码”字段。根据下面的代码,它应该只是空字符串。我还尝试将其设置为“某物”,但它仍然拒绝我输入的任何密码。

应针对提供的代码段进行假设:

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");
        }
    }

0 个答案:

没有答案
相关问题