openshift - OpenShift 上的 OpenJDK : "NoSuchAlgorithmException: EC AlgorithmParameters not available"

标签 openshift java

我在 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 -a gearName

重启您的设备/应用

  • rhc app restart -a gearName

这对我们有用。

关于openshift - OpenShift 上的 OpenJDK : "NoSuchAlgorithmException: EC AlgorithmParameters not available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28999410/

相关文章:

java - 简单的 JAVA : Password Verifier problem

java - 如何以线程安全的方式实现AWS S3客户端?

c# - 从 C# 调用 Java 代码

kubernetes - Openshift重新加密TLS终止路由无效。应用程序不可用

jenkins - 如何升级Jenkins服务器盒(OpenShift)?

kubernetes - 使用 Configmap 设置一组环境变量

java - Web 应用程序中的并发用户限制

logging - Openshift - rhc tail 命令

elasticsearch - 流利的从OpenShift提取日志,需要重新标记

java - java中的字符串比较不匹配