我在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
in
.openshift/action_hooks/pre_start
钩子。
它没有用,但由于我仍然需要使用BouncyCastle for JSSE,我已经放弃了这个解决方案。
Fortunatelly我能够切换回OpenJDK 1.7(通过.openshift/markers/java7
)
现在“解决”了这个问题。
答案 0 :(得分:4)
找到解决方案。
您可以定义属性文件以覆盖默认JRE文件jre/lib/security/java.security
中定义的一些键
此文件可以在OpenShift Gear的JAVA_OPTS_EXT环境属性中指定。
以下是我们解决问题的步骤。
创建文件
gearName
override_security.properties
jdk.tls.disabledAlgorithms=EC,ECDHE,ECDH
设置环境变量
fileLocation
-a gearName
重新启动您的设备/应用
gearName
这对我们起了作用。