SSLCipherSuite的SSL连接握手失败SSL_RSA_WITH_3DES_EDE_CBC_SHA

时间:2017-06-07 06:48:20

标签: ssl jms ibm-mq

我使用的是Spring boot 1.2.2和JDK1.8.0.40,我已将SSL密码套件指定为SSL_RSA_WITH_3DES_EDE_CBC_SHA,并将cer文件导入密钥库。

当我运行我的项目时,我将jvm参数设置如下:

-Djavax.net.debug=all -Djavax.net.ssl.keyStore=/java_home/jre/lib/security/cacerts -Djava.net.keyStorePassword=changeit

但我总是得到

handing exception:javax.net.ssl.SSLHandshakeException: No appropriate protocol(protocol is disabled or cipher suites are inappropriate)
SEND TLSv1.2 ALERT: fatal, description = handshake_failure
WRITE: TLSv1.2 Alert, length = 2
[Raw write]: length = 7
0000: 15 03 03 00 02 02 28       ......(
called closeSocket()
com.ibm.msg.client.jms.DetailedJMSException: JMSWMQ0018: Failed to connect to queue manager 'XXXX' with connection mode 'Client' and host name 'xxx.xxx.com(xxxxx)'.

确实,我已经做了几个操作来解决这个问题,例如:

  1. 将jce jar替换为unlimit encrypt
  2. 将cer文件导入jks
  3. 在jvm arguments中指定jks路径
  4. 使用匹配的SSL密码套件
  5. 使用SSL渠道
  6. 但是现在,我仍然在握手时失败,错误日志与上面相同。

    或者我是否需要从我的机器生成cer并上传到服务器?你能提出一些建议吗?

2 个答案:

答案 0 :(得分:1)

SSL_RSA_WITH_3DES_EDE_CBC_SHA是一个SSL 3密码套件。在Java 8中,SSL 3是不安全的disabled by default。您是否有任何理由将密码套件用于不安全的协议?

如果您想坚持使用单个密码套件,可以选择一个Java 8 supports

答案 1 :(得分:1)

新的JDK版本不断更新最低安全级别,这很好。但是,对所涉及的所有组件保持最新的协议限制并不总是容易的(或可能的)。

最好的办法是选择一个受支持的密码套件。

但是如果你正在开发(并且知道你在做什么),你可以通过编辑你的JDK的jre \ lib \ security \ java.security文件来删除这个限制。

搜索 jdk.tls.disabledAlgorithms 并删除或修改限制

# previously: 
# jdk.tls.disabledAlgorithms=SSLv3, RC4, MD5withRSA, DH keySize < 768
jdk.tls.disabledAlgorithms=MD5withRSA, DH keySize < 768