首頁 >Java >java教程 >當伺服器請求不同 CA 簽署的客戶端憑證時,為什麼我的 Java SSL 握手會失敗?

當伺服器請求不同 CA 簽署的客戶端憑證時,為什麼我的 Java SSL 握手會失敗?

Patricia Arquette
Patricia Arquette原創
2024-11-29 05:36:13555瀏覽

Why Does My Java SSL Handshake Fail When the Server Requests a Client Certificate Signed by a Different CA?

Java SSL 握手中客戶端憑證遺漏

SSL 握手期間Java 的行為有時會導致客戶端憑證遺漏,從而導致握手失敗。當伺服器請求由某個CA(在本例中為「RootCA」)簽署的用戶端憑證時,就會出現此問題,而Java 只能在Keystore 中找到由下級CA(「SubCA」)簽署的用戶端證書。

金鑰庫設定注意事項:

  1. 憑證鏈損壞:將「SubCA」憑證匯入到金鑰庫可能會破壞憑證鏈,導致金鑰管理員僅識別客戶端憑證。
  2. 憑證關聯: 「SubCA」憑證應與包含用戶端憑證及其金鑰庫中的私鑰的別名相關聯。可以使用 keytool -v -list -keystore store.jks 驗證此關聯。

伺服器設定注意事項:

  1. 憑證授權單位差異: 理想情況下,伺服器應要求由「SubCA 」簽署的客戶端證書,因為這是提供給客戶的可信權威。然而,Java 嚴格遵守證書鏈驗證,在這種情況下可能會導致握手失敗。

解決方案:

要修正此問題,用戶端憑證及其憑證鏈(包括「SubCA」憑證)應合併為單一檔案(例如,bundle.pem)。然後可以使用 keytool -importcert -keystore store.jks -alias myalias -file bundle.pem 將這個捆綁的 PEM 檔案匯入到儲存用戶端私鑰的 Keystore 別名中。透過這樣做,Java 將識別完整的憑證鏈並在 SSL 握手期間發送適當的憑證。

以上是當伺服器請求不同 CA 簽署的客戶端憑證時,為什麼我的 Java SSL 握手會失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn