首頁 > Java > java教程 > 為什麼我的 Java 用戶端在 SSL 握手期間不發送其憑證?

為什麼我的 Java 用戶端在 SSL 握手期間不發送其憑證?

Patricia Arquette
發布: 2024-12-02 07:34:10
原創
604 人瀏覽過

Why Doesn't My Java Client Send Its Certificate During SSL Handshake?

為什麼我的 Java 用戶端無法在 SSL 握手期間傳輸其憑證?

嘗試使用 Java 連線到安全 Web 服務,使用者經常遇到握手失敗的情況。儘管正確配置了金鑰庫和信任庫,但根本問題通常源自於 Java 在握手期間不願意傳輸用戶端憑證。

理解問題:

  1. 伺服器需要由受信任的 RootCA 簽署的客戶端憑證。
  2. Java 在金鑰庫中搜尋並僅找到由 SubCA 簽署的用戶端證書,該證書本身受 RootCA 信任。
  3. Java 不會超越金鑰庫,將信任庫排除在搜尋範圍之外。
  4. 因此,Java 聲稱它不會沒有合適的證書,握手失敗。

建議解決方案:

1.位址損壞的憑證鏈:

驗證SubCA 憑證是否正確匯入到金鑰庫中,而不破壞憑證鏈。這可以使用 keytool -v -list -keystore store.jks 來完成。如果每個別名條目只有一個憑證可見,則該鏈可能已損壞。

將憑證鏈匯入金鑰庫:

要解決此問題,請匯入客戶端憑證並將其整個憑證一起放入包含私鑰的密鑰庫別名中。

2.伺服器端的設定問題:

雖然伺服器對SubCA 簽章憑證的請求是合理的,但Java 嚴格遵守該要求可能會產生不必要的限制。據觀察,Chrome 和 OpenSSL 等瀏覽器在這方面更加靈活。

解決方法:

要繞過問題,可以使用另一種方​​法:

  1. 使用keytool -exportcert -rfc - file clientcert.pem -keystore 從金鑰庫匯出客戶端憑證store.jks -alias myalias。這將建立一個 PEM 檔案。
  2. 將客戶端憑證和中間 CA 憑證(以及可選的根 CA 憑證)合併到單一 bundle.pem 檔案中。
  3. 將憑證包匯入回金鑰庫使用 keytool -importcert -keystore store.jks -alias myalias -file bundle.pem.
包含私鑰的別名

以上是為什麼我的 Java 用戶端在 SSL 握手期間不發送其憑證?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板