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

2017-01-11

背景

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);
	}






注明:本文章属于转载,仅供行业人员学习交流使用,文章版权属于原创作者,在此向原创者致敬,感谢原创作者为大家学习交流提供精品内容。

站方声明:IThao123是为广大互联网从业者免费提供学习交流的平台,如果侵犯了原创著作权,请联系站方删除,给你带来不便,深表歉意。

顶部