如何解决Java通过JDBC访问MySQL时SSL连接告警问题

时间:2021-07-30 08:27:00

背景

MySQL 5.5.45+, 5.6.26+, 5.7.6+开始支持SSL连接,如果没有明确设置相关的选项时,缺省要求SSL连接。为兼容性考虑,旧应用程序需要设置verifyServerCertificate和useSSL属性。MySQL连接时给出的告警信息也清楚的给出了原因和处理方案。
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.

方案1: 在URL中设置相关属性

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Connection getConnection() throws SQLException {
		String url = "jdbc:mysql://localhost:3306/db_hibernate?verifyServerCertificate=false&useSSL=false";
		String user = "root";
		String password = "infinera";
		
		return DriverManager.getConnection(url, user, password);
	}

方案2: 通过Properties属性设置

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Connection getConnection() throws SQLException {
		String url = "jdbc:mysql://localhost:3306/db_hibernate";
		String user = "root";
		String password = "infinera";
		
		Properties properties = new Properties();
		
		properties.setProperty("user", "root");
		properties.setProperty("password", "infinera");
		properties.setProperty("useSSL", "false");
		properties.setProperty("verifyServerCertificate", "false");
		
		return DriverManager.getConnection(url, user, password);
	}