我能夠使用Android或BouncyCastle庫從CA簽名的X509客戶端證書中提取證書鏈信息嗎?從Android/BouncyCastle中籤名的X509證書(CSR響應)中提取證書鏈信息
我有一個Android客戶端從受信任的服務器接收CA簽名的X509證書。我想將已簽名的客戶端證書和我的私鑰保存到PKCS12(.p12)文件。我目前通過創建一個KeyStore
對象並添加證書和私鑰來完成此操作。當我使用KeyStore.setKeyEntry()
方法添加客戶端PrivateKey
時,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();
謝謝!
感謝您的回覆!請告訴我,如果我正確理解這一點。在驗證證書時,驗證者還必須信任證書正在使用的鏈(通過預安裝,下載等)?我想如果你還沒有信任發行者,你不能驗證證書。 – aspergillusOryzae
我正在使用客戶端憑據與我的服務器建立可信的SSL連接。 (我已經有了創建CSR的應用程序,獲得由我的服務器簽名的客戶端證書,並且上面簽名的證書是服務器響應。我試圖在客戶端Android設備上存儲pkey和簽名證書。)對於'setCertificateEntry ()'我應該使用'setKeyEntry()'並且傳遞X509Certificate'getEncoded()'字節嗎?我基本上試圖實現[OpenSSL的PKCS12_create函數](http://www.openssl.org/docs/crypto/PKCS12_create.html)。再次感謝@ nikolay-elenkov! – aspergillusOryzae
對,驗證者需要相信發行者CA,這是他們的信任錨。 'setKeyEntry()'應該爲你完成這項工作:你將得到一個帶有密鑰和證書的PKCS#12文件,並且沒有捆綁CA證書。 –