OpenShift 上的 OpenJDK:"NoSuchAlgorithmException: EC AlgorithmParameters not available"
OpenJDK on OpenShift: "NoSuchAlgorithmException: EC AlgorithmParameters not available"
我在 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
)
"solved" 现在的问题。
找到解决方案。
您可以定义一个属性文件来覆盖默认 JRE 文件中定义的一些键 jre/lib/security/java.security
可以在 OpenShift Gear 的 JAVA_OPTS_EXT 环境 属性 中指定此文件。
这些是我们为解决问题所采取的步骤。
创建文件
- rhc ssc
gearName
- cd $OPENSHIFT_DATA_DIR
- vi
override_security.properties
- 内容为
jdk.tls.disabledAlgorithms=EC,ECDHE,ECDH
- pwd -> 并记下(复制)刚刚创建的文件的完整路径位置。
- 退出
设置环境变量
- rhc 环境设置 JAVA_OPTS_EXT=-Djava.security.properties=文件:
fileLocation
-a gearName
重启你的gear/app
- rhc app restart -a
gearName
这对我们有用。
我在 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
)
"solved" 现在的问题。
找到解决方案。
您可以定义一个属性文件来覆盖默认 JRE 文件中定义的一些键 jre/lib/security/java.security
可以在 OpenShift Gear 的 JAVA_OPTS_EXT 环境 属性 中指定此文件。
这些是我们为解决问题所采取的步骤。
创建文件
- rhc ssc
gearName
- cd $OPENSHIFT_DATA_DIR
- vi
override_security.properties
- 内容为
jdk.tls.disabledAlgorithms=EC,ECDHE,ECDH
- pwd -> 并记下(复制)刚刚创建的文件的完整路径位置。
- 退出
设置环境变量
- rhc 环境设置 JAVA_OPTS_EXT=-Djava.security.properties=文件:
fileLocation
-agearName
重启你的gear/app
- rhc app restart -a
gearName
这对我们有用。