jdbc连接数据库SSL
在 Java8 及高版本以上的版本在调用 ssl 时会出现javax.net.ssl.SSLHandshakeException: No appropriate protocol
的异常。
1 | javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) |
解决办法如下:
- 修改
jre/lib/security/java.security
中的disabledAlgorithms
,删除SSLv3, TLSv1, TLSv1.1
,然后重启应用即可。在 vim 下,可以使用/disabledAlgorithms
快速查找。
jdk.tls.disabledAlgorithms=RC4, DES, MD5withRSA, \ DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \ include jdk.disabled.namedCurves
如果修改了,保存了,重启了还是没有效果,就看下面这个方法:
- 修改 jdk 配置文件
/etc/crypto-policies/back-ends/java.config
,类似上面方法一样,删除SSLv3, TLSv1, TLSv1.1
,保存重启应用。
jdk.tls.disabledAlgorithms=DH keySize < 2048, SSLv2, SSLv3, TLSv1.1, DHE_DSS, RSA_EXPORT, DHE_DSS_EXPORT, DHE_RSA_EXPORT, DH_DSS_EXPORT, DH_RSA_EXPORT, DH_anon, ECDH_anon, DH_RSA, DH_DSS, ECDH, 3DES_EDE_CBC, DES_CBC, RC4_40, RC4_128, DES40_CBC, RC2, HmacMD5
另外 jdk 奇数版本可用,偶数版本有上面这个问题,可用通过
yum --showduplicate list java* | grep 1.8.0
查看可用的版本,选择奇数版本安装也能解决这个问题。更新 crypto-policies
update-crypto-policies --set LEGACY