關於使用由CA機構(EJBCA)頒發的證書實現SLLSocket雙向認證服務端報null cert chain的解決方案


SSLSocket實現服務端和客戶端雙向認證的例子

文章中最后提到使用keytool.exe的自簽證書實現雙向認證可以,但是使用ejbca生成證書實現SLL Socket的雙向認證是服務端老是報錯提示 null cert chain的錯誤。

當時花了一整天的時間研究都沒有眉目,今天突然想到,cert chain,證書鏈,查看客戶端或服務證書庫中的證書,含有除了自身的私匙外還有一個CA的公匙,如下圖所示:

終於明白了,原來要實現雙向認證,使用keytool.exe工具的-export命令除需要導出自身的公匙證書外,還需要導出含CA公匙的證書。整個步驟也就如下:

1.使用EJBCA系統創建客戶端實體,token為jks證書庫形式(主題DN信息參考其他文章),在create key store菜單中輸入用戶名密碼導出客戶端證書庫 ejbcaclient.jks;

2.使用EJBCA系統創建服務端實體,token為jks證書庫形式,在create key store菜單中輸入用戶名密碼導出服務端證書庫 ejbcaserver.jks;

3.使用keytool.exe工具的-export命令分別導出含有客戶端公匙的證書以及含有CA簽發機構公匙的證書 sslclient.crt,sslclientca.crt;

4.使用keytool.exe工具的-export命令分別導出含有服務端公匙的證書以及含有CA簽發機構公匙的證書 sslserver.crt,sslserverca.crt;

5.將客戶端證書和頒發客戶端證書的CA證書使用keytool.exe的-import命令導入至服務端證書庫 ejbcaserver.jks,使服務端在通信時信任客戶端,確認客戶端的身份;

6.將服務端證書和頒發服務端證書的CA證書使用keytool.exe的-import命令導入至客戶端證書庫 ejbcaclient.jks,使客戶端在通信時信任服務端,並確認服務端的身份;

7.代碼編寫SLLSocket通信demo測試雙向認證。

注意:

1.如果使用EJBCA系統在頒發客戶端和服務端證書的簽發機構為同一個機構,則在導入通信雙方證書時不需要導入含簽發機構CA公匙的證書,因為證書庫里面已經包含了此證書。

下面附上SSLSocket雙向認證通信的簡易測試代碼。此代碼中含 將服務端證書及CA證書自動導入到客戶端證書庫的功能。

SSLSocket雙向認證通信示例(含證書庫及證書).zip


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM