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

这对我们有用。