我希望能夠連接到需要通過智能卡進行身份驗證的個人證書的https站點。我覺得我非常接近擁有它的工作,但不知道如何讓過去這個異常:Java客戶端SSL套接字unknown_ca
javax.net.ssl.SSLHandshakeException: Recieved fatal alert: unknown_ca
我不能夠分享我的,因爲合同的代碼,但這裏有一個總結:
我創建了一個包含從瀏覽器中導出的所有證書的密鑰庫。我使用這個密鑰庫作爲SSLContext的信任庫。我非常肯定,這個密鑰庫包含正確的CA證書來驗證遠程站點的證書,因爲它修復了「無法找到有效的證書路徑到請求的目標」異常。
我可以以編程方式使用智能卡讀卡器創建一個密鑰庫,作爲與此處描述的技術類似的提供程序:Common Access Card (CAC) Authentication Using Java。從智能卡創建的密鑰庫包含我的個人證書。當我使用它作爲SSLContext的密鑰庫時,這將解決錯誤消息:「收到致命警報:handshake_failure」。
所以,看來我越來越近!但是我看到最近的堆棧跟蹤是:
javax.net.ssl.SSLHandshakeException: Recieved fatal alert: unknown_ca
我加入了JVM標誌-Djavax.net.debug=ssl
和我看到好的SSL調試信息,但不知道如何讀的調試跟蹤來找出哪些CA是未知的?
一個問題:truststore密鑰庫包含所有CA證書。但是從智能卡創建的密鑰庫不包含任何CA證書(它只包含智能卡上的個人證書)。也許我需要將CA添加到密鑰庫?
Andy有關我可能會丟失什麼和/或如何解釋ssl調試輸出的其他建議/想法?