2017-07-24 29 views
0

我們得到了來自我們客戶的.p7b格式的服務器證書鏈信任庫,然後我們需要導出到使用Java/Scala的API我們的客戶信任存儲出口服務器信任證書鏈下一個別名

他們的證書文件包含三個證書:根,中間,實際服務器...

我們如何將其中三個導出到我們的信任存儲下的同一別名?

實際上是否需要在一個別名下導出它們?

這是我們做的那麼遠,

//load default cacerts first in order to export the server cert 
val keystore = KeyStore.getInstance(KeyStore.getDefaultType) 
keystore.load(new FileInputStream(cacertsPath), decryptedPass.toCharArray) 

val cf = CertificateFactory.getInstance("X.509") 
//this is the server cert we are trying to export 
val bais = fullStream(customTrustFile) 
val certs = cf.generateCertificates(bais) --> this returns a chain of 3 certs 

certs.toArray[Certificate](new Array[Certificate](certs.size())).zipWithIndex.foreach { 
    case (cert, i) => keystore.setCertificateEntry("api.*.*.site-" + i, cert) 

// Save the new keystore contents 
keystore.store(new FileOutputStream(cacertsPath),decryptedPass.toCharArray) 

如果你看到,我們插入證書的方式,它使用了三個別名後綴爲-1,-2,-3,所以我們最終最多插入三個條目到信任,不知道這是將證書鏈的權利..

  1. 是否有插入一個別名下的證書鏈的方法嗎?

  2. 客戶端如何找到匹配的服務器信任?它使用別名?客戶端是否也只需要服務器根證書?或者它需要所有三個?

感謝

回答

1

1.Is那裏插入一個別名下的證書鏈的方法嗎?

沒有,每個受信任的證書有一個別名

別名標識唯一信任的證書項,私鑰條目或密鑰條目。私鑰條目也可以伴隨相應公鑰的證書鏈。

2客戶端如何找到匹配的服務器信任?它使用別名?客戶端是否也只需要服務器根證書?或者它需要所有三個?

您只需將根證書導入到信任庫。不需要別名

連接期間的客戶端將收到服務器證書和證書鏈(不帶根目錄)。它會嘗試將從葉到上的鏈的最後一個證書與信任庫的一些證書進行匹配。這樣做證實證書的簽名與根證書的公鑰對應

相關問題