RDS MySQL SSL 使用详解

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: RDS MySQL SSL 使用详解

背景描述

为了提高RDS MySQL的链路安全性,可以启用SSL(Secure Sockets Layer)加密,并安装SSL CA证书到需要的应用服务。SSL在传输层对网络连接进行加密,能提升通信数据的安全性和完整性,但会同时增加网络连接响应时间。

SSL在部署和使用过程,易出现各种问题,本文就个人经验介绍一下MySQL SSL常见问题。


SSL技术简单介绍

SSL技术优点

  • 机密性:SSL协议使用密钥加密通信数据。
  • 可靠性:服务器和客户都会被认证,客户的认证是可选的。
  • 完整性:SSL协议会对传送的数据进行完整性检查。

工作原理

流程图


SSL握手流程

  1. 客户端向服务器发送Client Hello,信息包含:SSL协议号、加密算法、随机数,等信息。
  2. 服务端向客户端发送Server Hello,信息包含:SSL协议号、加密算法、随机数和自已的公钥等。数据进行签名。
  3. 客户端检证证书是否过期,CA是否可靠,并用公钥进行验证签名是否正确。
  4. 客户端生成对称密钥,并用公钥进行加密,回传给服务端。用于后续加密。(对称加密比非对称加密省资源)
  5. 如果(在握手过程中可选)服务端要求验证客户身份,客户会生成一个随机数,然后进行签名,并将签名随机数和自己的证书传送给服务器。
  6. 同4步,服务器验证客户端的证书和签名信息等。
  7. 服务器和客户端使用相同的主密码进行通信。同时还要验证通信过程中的完整性。
  8. 客户端向服务器发出信息,指明使用对称密钥进行加密,同时告知服务器握手结束。
  9. 服务器向客户端发出信息,指明使用对称密钥进行加密,同时告知客户端握手结束。
  10. 同7步,SSL 握手结束。

抓包查看SSL握手流程

通过抓包,可以看来客户端与服务端进行建议SSL连接的整过过程。


如何开通RDS MySQL SSL功能

开启SSL加密

RDS MySQL是支持SSL功能,但需要在控制台开启,具体如何操作需要参考设置SSL加密文档。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据安全性
  3. 单击未开通前面的滑块开关。
  4. 在弹出的对话框中选择要开通SSL加密的地址,单击确定,开通SSL加密。

如截图:

如何在JAVA程序中配置SSL

使用MySQL SSL连接数据库测试样例:

importjava.sql.*;
importjava.util.Properties;
publicclassMySQLSSL {
publicstaticvoidmain(String[] args) {
StringconnectionUrl="jdbc:mysql://******.mysql.rds.aliyuncs.com:3306/db01";
Propertiesproperties=newProperties();
properties.setProperty("user","****");
properties.setProperty("password","*****");
properties.setProperty("useSSL","true");
properties.setProperty("trustCertificateKeyStoreUrl","file:/Users/*****/Downloads/ApsaraDB-CA-Chain/ApsaraDB-CA-Chain.jks");
properties.setProperty("trustCertificateKeyStorePassword","apsaradb");
ResultSetresultSet;
try (Connectionconnection=DriverManager.getConnection(connectionUrl,properties);
Statementstatement=connection.createStatement()) {
StringselectSql="SELECT * FROM t1 limit 1";            //输入希望执行的SQL。resultSet=statement.executeQuery(selectSql);
while (resultSet.next()) {
System.out.println(resultSet.getString("id"));
                }
            }
catch (SQLExceptione) {
e.printStackTrace();
            }
        }
}


说明:

  • trustCertificateKeyStoreUrl:指定Server端 CA证书的路径
  • trustCertificateKeyStorePassword:指定Server端CA证书的密码
  • 阿里云RDS MySQL CA证书都是一样的,所以不同的实例基本上都是使用相同的CA证书


常见问题

  1. 为什么出现报错信息: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.

解答:

  • 不建议没有使用server ca 证书进行验证就使用SSL连接。
  • 在适当的版本,服务端开启SSL,客户端默认就是通过SSL连接的。
  • 若不使用SSL连接,将verifyServerCertificate属性设置为false。
  • 可以通过设置useSSL=false显式禁用SSL,或者设置useSSL=true并且要提供服务器证书验证。

解决方案:

  • 连接字符串,添加useSSL=false选项,禁用SSL,就不会出现警告。
  1. java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

解决方案:

  • 这个报错,是指定了useSSL=true ,但是没有指定服务器证书路径。
  • 需要添加trustCertificateKeyStoreUrl和trustCertificateKeyStorePassword选项


相关文档




相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
存储 关系型数据库 MySQL
RDS MySQL 数据库运维简述
从运维的视角,汇总云数据库RDS MySQL使用的避坑指南。文章初版,维护更新,欢迎指点。
771 3
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
3月前
|
SQL 存储 关系型数据库
成为MySQL大师的第一步:轻松学习MySQL数据库的终极指南!
成为MySQL大师的第一步:轻松学习MySQL数据库的终极指南!
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
【MySQL 数据库】2、MySQL 的数据控制语言、函数和约束
31 0
|
28天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
96 0
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
【MySQL 数据库】1、MySQL 的 DDL、DML、DQL 语句
52 0
|
9天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
9天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
28天前
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)(一)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(数据恢复补充篇)
30 0