我在 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 不可用
。
我也试过@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
钩子(Hook)。
它没有用,但由于我仍然需要为 JSSE 使用 BouncyCaSTLe,所以我放弃了这个解决方案。
幸运的是,我能够切换回 OpenJDK 1.7(通过 .openshift/markers/java7
)
现在“解决”了这个问题。
最佳答案
找到解决方案。
您可以定义一个属性文件来覆盖默认 JRE 文件 jre/lib/security/java.security
中定义的一些键值
可以在 OpenShift Gear 的 JAVA_OPTS_EXT 环境属性中指定该文件。
这些是我们为解决问题所采取的步骤。
创建文件
- rhc ssc
设备名称
- cd $OPENSHIFT_DATA_DIR
- vi
override_security.properties
- 内容是
jdk.tls.disabledAlgorithms=EC,ECDHE,ECDH
- pwd -> 并记下(复制)刚刚创建的文件的完整路径位置。
- 退出
设置环境变量
- rhc env set JAVA_OPTS_EXT=-Djava.security.properties=file:
fileLocation
-agearName
重启您的设备/应用
- rhc app restart -a
gearName
这对我们有用。
关于openshift - OpenShift 上的 OpenJDK : "NoSuchAlgorithmException: EC AlgorithmParameters not available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28999410/