为了提高链路安全性,您可以启用SSL(Secure Sockets Layer)加密,并安装SSL CA证书到需要的应用服务。SSL在传输层对网络连接进行加密,能提升通信数据的安全性和完整性,但会同时增加网络连接响应时间。
前提条件
实例版本如下:
- MySQL 8.0三节点企业版
- MySQL 8.0高可用版
- MySQL 5.7三节点企业版
- MySQL 5.7高可用版
- MySQL 5.6
背景信息
说明 RDS支持的TLS版本为1.0、1.1和1.2。
其他引擎设置SSL加密请参见:
注意事项
- SSL的证书有效期为1年,请及时更新证书有效期并重新下载配置CA证书,否则使用加密连接的客户端程序将无法正常连接。
- 由于SSL加密的实现原理,启用SSL加密会显著增加CPU使用率,建议您仅在外网链路有加密需求的时候启用SSL加密。内网链路相对较安全,一般无需对链路加密。
- 读写分离地址不支持SSL加密。
- 关闭SSL加密会重启实例,请谨慎操作。
开启SSL加密
配置SSL CA证书
开通SSL加密后,应用或者客户端连接RDS时需要配置SSL CA证书。本文以MySQL Workbench和Navicat为例,介绍SSL CA证书安装方法。其它应用或者客户端请参见对应产品的使用说明。
MySQL Workbench配置方法
Navicat配置方法
更新证书有效期
说明
- 更新有效期操作将会重启实例,重启前请做好业务安排,谨慎操作。
- 更新有效期后需要重新下载及配置CA证书。
关闭SSL加密
说明
- 关闭SSL加密会重启RDS实例,系统会触发主备切换降低影响,但仍建议您在业务低峰期操作。
- SSL加密关闭后,数据库访问性能会有一定程度提升,但安全性上有削弱,故非安全环境下不建议关闭SSL加密。
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
- 在左侧导航栏单击数据安全性。
- 选择SSL标签页。
- 单击已开通前面的开关,在弹出的提示框中单击确定。
附录:通过SSL连接数据库示例代码
- Java示例代码:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> ---------------------------------------------------------demo------------------------------------------------------------- package com.aliyun.sample; import com.mysql.cj.jdbc.MysqlDataSource; import java.sql.Connection; import java.sql.SQLException; public class Sample { public static void main(String[] args) { Connection conn = null; MysqlDataSource mysqlDS=null; try{ mysqlDS = new MysqlDataSource(); // set useSSL=true and provide truststore for server certificate verification. mysqlDS.setUseSSL(true); mysqlDS.setClientCertificateKeyStoreType("JKS"); // 您的ApsaraDB-CA-Chain.jks路劲 file:/D:\ApsaraDB-CA-Chain\ApsaraDB-CA-Chain.jks mysqlDS.setClientCertificateKeyStoreUrl("file:/D:\\xxxx\\ApsaraDB-CA-Chain.jks"); // JAVA中密码统一为apsaradb mysqlDS.setClientCertificateKeyStorePassword("apsaradb"); mysqlDS.setTrustCertificateKeyStoreType("JKS"); // 您的ApsaraDB-CA-Chain.jks路劲 file:/D:\ApsaraDB-CA-Chain\ApsaraDB-CA-Chain.jks mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks"); // JAVA中密码统一为apsaradb mysqlDS.setTrustCertificateKeyStorePassword("apsaradb"); // 您的数据库连接串 mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com"); // 您的数据库端口 mysqlDS.setPort(3306); // 您的数据库账号 mysqlDS.setUser("xxxxxx"); // 您的数据库密码 mysqlDS.setPassword("xxxxxx"); // 您的数据库名 mysqlDS.setDatabaseName("xxxxxx"); conn = mysqlDS.getConnection(); }catch(Exception e){ e.printStackTrace(); } finally { try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
- Python示例代码:
# 安装pymysql pip install pymysql import pymysql try: conn = pymysql.connect(host='******.mysql.rds.aliyuncs.com',user='*****',passwd='******,db='*****',ssl=True, ssl_ca='/path/to/path/ApsaraDB-CA-Chain.pem') cursor = conn.cursor() cursor.execute('select version()') data = cursor.fetchone() print('Database version:', data[0]) cursor.close() except pymysql.Error as e: print(e)
常见问题
SSL证书到期后不更新会有什么影响?会影响实例运行或数据安全吗?
SSL证书到期后不更新,仅会导致使用加密连接的客户端程序无法正常连接实例,不会影响实例运行或数据安全。