OpenShift上的OpenJDK:“NoSuchAlgorithmException:EC AlgorithmParameters not available”

时间:2015-03-11 23:35:19

标签: java openshift openjdk

我在OpenShift上使用Wildfly 8.2(OpenJDK 1.8.0_31)遇到java.security.NoSuchAlgorithmException: EC AlgorithmParameters not availableAmazonHttpClient抛出异常)。

看起来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 in .openshift/action_hooks/pre_start钩子。 它没有用,但由于我仍然需要使用BouncyCastle for JSSE,我已经放弃了这个解决方案。

Fortunatelly我能够切换回OpenJDK 1.7(通过.openshift/markers/java7) 现在“解决”了这个问题。

1 个答案:

答案 0 :(得分:4)

找到解决方案。

您可以定义属性文件以覆盖默认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 env set JAVA_OPTS_EXT = -Djava.security.properties = file:fileLocation -a gearName

重新启动您的设备/应用

  • rhc app restart -a gearName

这对我们起了作用。