我遇到了Jboss服务器和运行在Java 6上的https连接器的问题。 我想让我的服务器只使用TLSv1.2并使用密码套件" TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"用于解码证书。
我知道Java 6不支持TLSv1.2,但我将Bouncy Castle JCE和JSSE提供程序添加到JDK(https://www.bouncycastle.org/latest_releases.html):
添加了JAR文件( bcprov-jdk15on-159.jar 和 bctls-jdk15on-159.jar path_to_jdk / jre / lib / ext 文件夹
编辑文件 path_to_jdk / jre / lib / security / java.security 添加行:
security.provider.10 = org.bouncycastle.jce.provider.BouncyCastleProvider security.provider.11 = org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
java指令: SSLContext.getInstance(" TLSv1.2"); 如果我在一个小的测试中不再抛出NoSuchAlgorithmException考试班。
On Jboss:
编辑文件 path_to_jboss / server / default / deploy / jbossweb.sar / server.xml :
<连接器协议=" HTTP / 1.1" SSLEnabled ="真" 端口=" 8443"地址=" $ {jboss.bind.address}" keystoreFile =" $ {jboss.server.home.dir} /conf/jboss.pfx" keystorePass ="密码" sslProtocols =" TLSv1.2" maxThreads =" 170" />
之后,jboss仍然只为https连接提供SSLv3和TLSv1协议。
任何解决方案?
由于
答案 0 :(得分:0)
我相信' sslProtocols'属性转换为对SSLParameters.setProtocols的调用(稍后由SSLSocket.setParameters生效),并且不会影响SSLContext.getInstance调用。所以你仍然得到一个SunJSSE SSLContext,因为你以较低的优先级添加了BCJSSE。
我建议将java.security中的BouncyCastleJsseProvider条目移动到更高的优先级(比com.sun.net.ssl.internal.ssl.Provider)。
同样在java.security中,您需要将默认的KMF类型从SunX509设置为PKIX(更改现有条目):
ssl.KeyManagerFactory.algorithm=PKIX
这是因为BCJSSE目前仅适用于自己的KMF实现。