簡體   English   中英

如何設置 Java VM 以使用由 Mac OS X 處理的根證書(信任庫)

[英]How to set up Java VM to use the root certificates (truststore) handled by Mac OS X

使用scribe OAuth 庫時出現以下異常。

Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty

基於一些谷歌搜索,我似乎應該以某種方式設置 JVM 信任庫。

為什么我需要這樣做? 如何指示 Java VM 使用操作系統的默認信任庫? (在我的例子中是 Mac OS X)。

我可以通過在啟動VM時添加此系統pro來設置默認信任庫:

-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts

我仍然不明白為什么我需要這樣做。 這應該是默認值。 每次添加它也很煩人。 有沒有更好的方法,例如某些操作系統設置?

啊! 我知道這個問題。 我有類似的問題,它與OSX中的Java綁定有關。 一旦我安裝了最新版本,它就得到了修復。

https://support.apple.com/en-us/HT204036

我認為每個人都清楚JAVA在處理SSL時需要一種識別默認信任庫的方法,所以這些信息已經以某種方式傳遞給JAVA,所以我認為手頭的“更新”問題是如何做到的以一次性,一次又一次忘記的方式。

我能找到的最佳方法是在您的操作系統級別設置JAVA_TOOL_OPTIONS環境變量,如果設置了此環境變量,則默認情況下將使用您在此環境變量中提供的參數啟動JAVA。

因此, 每次啟動JVM時 都不需要設置 -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts ,而是 在操作系統級別 設置 JAVA_TOOL_OPTIONS 環境變量“一次”,其值為 -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts 然后你就完成了。

以下是“進一步閱讀”#1的摘錄:

設置此環境變量后,JNI_CreateJavaVM函數(在JNI調用API中)會將環境變量的值預先添加到其JavaVMInitArgs參數中提供的選項中。

下面提到了需要注意的內容,摘自“進一步閱讀”的第1部分:

在某些情況下,出於安全原因禁用此選項,例如,在Solaris OS上,當有效用戶或組ID與實際ID不同時,將禁用該選項。

下面是另一個需要注意的警告(摘自“進一步閱讀”中的#1),但我認為因為上下文不是關於VM選擇參數所以它不相關,而只是提及。

由於在調用JNI_CreateJavaVM時檢查此環境變量,因此不能使用通常由啟動程序處理的選項來擴充命令行,例如,使用-client或-server選項進行VM選擇。

進一步閱讀:

您可以使用Apple JCA Provider將OSX鑰匙串用作Java信任庫。 只需使用以下系統屬性啟動JVM:

-Djavax.net.ssl.trustStoreType=KeychainStore

您可以使用JAVA_TOOL_OPTIONS環境變量為每個已啟動的JVM設置此屬性,如hagrawal的回答中所述

要使 Java 使用 macOS 鑰匙串,請將以下參數傳遞給 Java VM:

-Djavax.net.ssl.trustStoreType=KeychainStore 

但是,Apple JCE 提供程序(處理鑰匙串訪問)或 macOS 本身似乎存在錯誤,這顯然會導致 Java 看到登錄和系統鑰匙串中的證書,但不是那些系統根。 不幸的是,后者正是存儲所有系統提供的證書的地方。 :-(

一些用戶報告說添加

-Djavax.net.ssl.trustStore=NUL

或者

-Djavax.net.ssl.trustStore=/dev/null

已經為他們解決了問題。 我無法證實這一點。 當我嘗試時它對我不起作用。

不過,我很確定這曾經可以正常工作。

暫無
暫無

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

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