1

我是否能够使用 Android 或 BouncyCastle 库从 CA 签名的 X509 客户端证书中提取证书链信息?

我有一个 Android 客户端,它从受信任的服务器接收 CA 签名的 X509 证书。我想将签名的客户端证书和我的私钥保存到 PKCS12 (.p12) 文件中。我目前通过创建一个KeyStore对象并添加证书和私钥来做到这一点。当我PrivateKey使用该KeyStore.setKeyEntry()方法添加客户端时,aCertificate[] chain是最后一个参数,目前仅包含客户端证书。这是否会阻止我的证书可验证,因为我没有 CA 证书Certificate[] chain如果是,是否可以使用从签名中提取的信息填充证书链X509Certificate

大多数示例似乎从 PEM 文件、BKS 信任库加载 CA 链,或者已经可以访问证书列表。

这是我所拥有的:

    X509Certificate cert;      // signed client cert
    PrivateKey pkey;           // client private key
    String password; 

    KeyStore store;
    store = KeyStore.getInstance("PKCS12", "BC");
    store.load(null, null);

    // adding the signed cert
    store.setCertificateEntry("Client certificate", cert);

    // creating the cert chain
    X509Certificate[] chain = new X509Certificate[1];
    chain[0] = cert;
    // add rest of the certs in the chain here

    // adding the private key   
    store.setKeyEntry("Client private key", pkey, password.toCharArray(), chain);

    FileOutputStream fos;
    fos = openFileOutput("clientCredentials.p12", Context.MODE_PRIVATE);
    store.store(fos, password.toCharArray());
    fos.flush();
    fos.close();

提前致谢!

4

1 回答 1

0

CA 证书不包含在您的签名证书中。您必须从某个地方获取它们(预安装、从受信任的服务器下载等)。至于不安装完整的链,如果验证者已经可以访问必要的 CA 证书,他们总是可以验证你的最终实体证书。您打算如何使用您的密钥和证书?

顺便说一句,您要求setCertificateEntry()创建一个受信任的证书条目,这可能不是您想要的最终实体证书。

于 2012-10-03T02:26:58.137 回答