我是否可以使用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();
提前致谢!
答案 0 :(得分:0)
CA证书未包含在您签名的证书中。您必须从某个地方获取它们(预安装,从可信服务器下载等)。至于不安装完整链,如果验证者已经可以访问必要的CA证书,他们总是可以验证您的最终实体证书。您打算如何使用密钥和证书?
顺便说一句,您对setCertificateEntry()
的调用会创建一个可信证书条目,这可能不是您想要的最终实体证书。