RDS MySQL SSL 使用详解

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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选项


相关文档




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
149 2
|
3月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
520 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
93 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
85 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
2月前
|
数据可视化 关系型数据库 MySQL
【IDEA】配置mysql环境并创建mysql数据库
【IDEA】配置mysql环境并创建mysql数据库
227 0
|
4月前
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
5月前
|
关系型数据库 MySQL Serverless
函数计算产品使用问题之调用RDS MySQL的步骤是怎样的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
SQL 关系型数据库 MySQL
MySql⭐一、配置MySql数据库,并创建一个表单
MySql⭐一、配置MySql数据库,并创建一个表单
|
5月前
|
开发框架 前端开发 关系型数据库
ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据
ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据
|
6月前
|
关系型数据库 MySQL 数据库
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
735 1

热门文章

最新文章