小码在学习Java的JDBC编程中,碰到了一条非常长的异常警告,idea的框都装不下了!!
一、异常信息
Tue Mar 26 23:36:57 CST 2024 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
翻译过来的意思就是:
3月26日星期二23:36:57 CST 2024警告:不建议在没有服务器身份验证的情况下建立SSL连接。根据MySQL 5.5.45+、5.6.26+和5.7.6+的要求,如果没有设置显式选项,则默认情况下必须建立SSL连接。为了符合不使用SSL的现有应用程序,verifyServerCertificate属性设置为“false”。您需要通过设置useSSL=false来显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。
二、原因分析
警告中已经很清楚的说明原因了,其实就是为了安全考虑。
- 在没有服务器身份验证的情况下建立SSL连接是不安全的,因为它容易遭受中间人攻击。SSL连接的目的是确保通信的机密性和完整性,以保护数据不被窃听和篡改。
- 服务器身份验证是SSL连接的一部分,它确保客户端与服务器之间的通信是与正确的服务器建立的。
- 如果没有服务器身份验证,攻击者可以冒充服务器,与客户端建立SSL连接,并欺骗客户端发送敏感信息,如登录凭证、信用卡信息等。这种攻击被称为中间人攻击。
- 通过服务器身份验证,SSL连接可以确保通信的可靠性。服务器会使用数字证书来证明自己的身份,并由可信的第三方机构颁发的证书来验证。如果客户端无法验证服务器的身份,应该终止连接,从而防止中间人攻击的发生。
因此,建议在建立SSL连接时,始终确保进行服务器身份验证,以保护通信的安全性。
三、解决方法
警告中说如果没有设置显式选项,则默认情况下必须建立SSL连接,那么我们就设置显示选项不就完成了?
url:jdbc:mysql://localhost:3306/bitwork
只需要在 url 后面加上 userSSL = false 即可
url:jdbc:mysql://localhost:3306/bitwork?useSSL=false