【发布时间】:2023-03-19 20:05:01
【问题描述】:
我在 OpenShift 上使用 Wildfly 8.2 (OpenJDK 1.8.0_31) 遇到了 java.security.NoSuchAlgorithmException: EC AlgorithmParameters not available(AmazonHttpClient 引发了异常)。
OpenJDK 1.8 和 ECC 似乎存在错误: https://bugzilla.redhat.com/show_bug.cgi?id=1167153
在建议的解决方法中,需要编辑 jre/lib/security/java.security 以禁用 jdk.tls.disabledAlgorithms=EC,ECDHE,ECDH。
或者删除jre/lib/ext/sunec.jar
很遗憾,我无法在 OpenShift 上执行此操作(缺少权限)。
这里最好的解决方法是什么?我可以切换到没有这个问题的 Oracle JDK(在 OpenShift 上)吗?
更新:
我删除了 Sun java.security.Provider-s 并添加了 BouncyCastle:
static {
Security.removeProvider("SunEC");
Security.removeProvider("SUN");
Security.removeProvider("SunJSSE");
// ...
Security.addProvider(new BouncyCastleProvider());
}
不幸的是,BouncyCastle 不是 JSSE 提供商 (create an SSLContext instance using a Bouncy Castle provider) 并且
SSLContext.getInstance() 失败
NoSuchAlgorithmException: TLS SSLContext not available.
我也尝试了@Rudy De Busscher 建议的答案,虽然我不赞成手动设置
env 变量,因为它是以后很容易被遗忘的东西。
相反,我将JAVA_OPTS_EXT 设置添加到$OPENSHIFT_DATA_DIR/.my_custom_env
并用source ${OPENSHIFT_DATA_DIR}.my_custom_env 加载它
.openshift/action_hooks/pre_start 钩子。
它没有用,但由于我仍然需要为 JSSE 使用 BouncyCastle,所以我放弃了这个解决方案。
幸运的是,我能够切换回 OpenJDK 1.7(通过 .openshift/markers/java7)
现在“解决”了这个问题。
【问题讨论】: