从Android / BouncyCastle中签名的X509证书(CSR响应)中提取证书链信息

时间:2012-10-02 23:21:16

标签: android x509certificate bouncycastle pkcs#12 android-keystore

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

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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