簡體   English   中英

為什么 Java 運行時在 SSL 信任存儲的工作方式以及我們如何處理它方面有如此大的不同?

[英]Why does Java runtime differ so much in how SSL trust store works and how do we deal with it?

我們碰巧運行了一個暴露 http:// 和 https:// 端點的 REST API Web 服務。 https:// 端點背后有一個 SSL 證書,需要不時更新一次。 每隔一次我們更新 SSL 證書時,一些運行 Java 程序的用戶就會與我們的服務進行交互,抱怨說他的程序不再有效,他必須更改 Java 證書信任庫中的某些內容。 我們有使用任何程序開發的用戶——PHP、C#、Ruby 等等——當我們更改證書時,他們都不會抱怨,但一些 Java 用戶每隔一段時間就會遇到問題。

Java 運行時在這方面有何特別之處? 我們應該做些什么來改善用戶體驗?

我們有使用任何程序開發的用戶——PHP、C#、Ruby 等等——當我們更改證書時,他們都不會抱怨,但一些 Java 用戶每隔一段時間就會遇到問題。

  • PHP:直到最近 PHP 在默認情況下都沒有驗證證書。 這僅在 PHP 5.6 中有所改變 如果它驗證它使用通常需要 CA 的 UNIX 上的系統 CA 存儲。 因此,可能是您的 PHP 客戶端根本不驗證證書,因此沒有問題。
  • C# - 使用通常需要 CA 的系統 CA 存儲
  • Ruby:使用系統 CA 存儲
  • Perl:要么根本不驗證,要么使用系統 CA 存儲,要么使用 mozilla 的 CA 存儲,具體取決於模塊的版本和您使用的發行版。

相反,Java 帶有自己的 CA 存儲,其中包含的 CA 比通常隨系統一起提供的要少得多。 這也取決於 Java 版本。 因此,客戶端使用的 Java 版本可能不知道您使用的根 CA。 此外,較舊的 Java 版本不執行 SNI。 他們有弱 DH 密鑰的問題,不支持更大的 RSA 密鑰等。由於有很多舊的和不受支持的 Java 安裝,請選擇影響當今應用程序的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM