2017-04-17 54 views
1

我正在使用下面的方法來讀取證書。無法讀取CA證書(GetCertificateChain不返回完整鏈)

KeyStore ks = KeyStore.getInstance("pkcs12"); 
    ks.load(in, password); 
    String alias = ks.aliases().nextElement(); 
    Certificate[] chain = ks.getCertificateChain(alias); 
    ... 

這種方法非常實用,但是我在證書中遇到了一個問題,它沒有加載完整的證書字符串。

對於例1: When reading certificate 1 the statement below returns 4 strings

對於例2: When reading certificate 2 the statement below returns only one string

沒有人有任何想法可能發生?

編輯

試圖更好地解釋,這個證書是用來連接到WS。在通信過程中,WS返回以下拒絕連接已關閉:javax.net.ssl.SSLHandshakeException:收到的致命警報:unknown_ca 與此WS的連接需要完整的證書鏈演示文稿。

由於證書下面提到顯示JAVA的失敗,但它完全在.NET中,正確顯示證書鏈

回答

0

根據API documentation

返回: 證書鏈(先訂購用戶證書,後跟零個或多個證書頒發機構);如果給定的別名不存在或不包含證書鏈,則爲null

這意味着或者,鏈中沒有更多證書(自簽名證書)或所需鏈元素不包含在PKCS#12消息中,並且不能通過其他來源獲得。

+0

我明白你的觀點。但是問題仍然存在,因爲如果通過.NET導入,相同的證書可以正常工作 通過使用.NET的示例,系統可以加載並顯示所有證書鏈。 – Blomersi

+0

.NET和Java是具有不同API的不同平臺,可能會產生不同的結果。 – Crypt32