Tam*_*mas 14 java macos ssl-certificate truststore scribe
使用scribe OAuth库时出现以下异常.
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Run Code Online (Sandbox Code Playgroud)
基于一些谷歌搜索似乎我应该以某种方式设置JVM信任库.
为什么我需要这样做?如何指示Java VM使用os的默认信任库?(在我的情况下是Mac OS X).
小智 17
您可以使用Apple JCA Provider将 OSX 钥匙串用作 java 信任存储。只需使用以下系统属性启动 JVM:
-Djavax.net.ssl.trustStoreType=KeychainStore
Run Code Online (Sandbox Code Playgroud)
您可以使用JAVA_TOOL_OPTIONS
环境变量为每个启动的 JVM 设置此属性,如hagrawal 的回答中所述。
我可以通过在启动VM时添加此系统pro来设置默认信任库:
-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts
Run Code Online (Sandbox Code Playgroud)
我仍然不明白为什么我需要这样做.这应该是默认值.每次添加它也很烦人.有没有更好的方法,例如某些操作系统设置?
我想每个人都很清楚,在处理 SSL 时,JAVA 需要一种方法来识别默认的信任库,所以这个信息已经以某种方式传递给了 JAVA,所以我认为手头的“更新”问题是如何做到这一点以一次做一次然后忘记每次的方式。
我能找到的最好方法是JAVA_TOOL_OPTIONS
在您的操作系统级别设置环境变量,如果设置了此环境变量,则默认情况下将使用您在此环境变量中提供的参数启动 JAVA。
因此,您无需在 -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts
每次启动 JVM 时都 进行设置,而是JAVA_TOOL_OPTIONS
在您的操作系统级别 将环境变量“一次”设置为值 as-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 选择。
进一步阅读:
归档时间: |
|
查看次数: |
10579 次 |
最近记录: |