详情页标题前

阿里云RDS数据库设置SSL加密-云淘科技

详情页1

RDS MySQLSSL(Secure Socket Layer)加密功能用于对传输中的数据进行加密,适用于增强RDS连接安全性或者满足安全合规等场景。

前提条件

RDS MySQL实例系列和版本如下:

  • 高可用系列:8.0、5.7、5.6

  • 集群系列:8.0、5.7

说明

  • 您可以前往实例基本信息页面查看以上信息。

  • 基础系列的RDS实例不支持SSL加密。如需变更至其他产品系列,请参见变更配置。

功能介绍

SSL加密功能可以对RDS MySQL和客户端之间传输的数据进行加密,防止数据被第三方监听、截取和篡改。

开启SSL加密后,客户端连接RDS MySQL时,可以选择进行加密连接或者非加密连接。

开启SSL加密时,RDS MySQL将生成服务器证书以及公私钥。

在加密连接的建立过程中,RDS MySQL会发送服务器证书(包含公钥)给客户端,客户端用收到的公钥加密生成的对称密钥,只有RDS MySQL有私钥能够解密该对称密钥,RDS MySQL和客户端将使用该对称密钥对通信数据进行加密和解密,从而保证通信的机密性。客户端还可以使用CA证书验证收到的服务器证书以确认RDS MySQL身份,防止中间人攻击。

说明

  • TLS(Transport Layer Security)是SSL的后继版本,本文统称为SSL。

  • RDS MySQL支持的TLS版本为1.0、1.1和1.2。

影响

  • 开启SSL加密、关闭SSL加密、更新证书(MySQL 5.6、5.7版本)会重启实例,RDS服务会出现约30秒的闪断,建议在业务低峰期操作,并确保您的应用有自动重连机制,自动重连需要在您的应用侧代码中设置。MySQL 8.0版本更新证书不会重启实例。

  • 开启SSL加密后,建立加密连接会显著增加CPU使用率。建议您仅在外网链路有加密需求的时候采用SSL加密,内网链路相对较安全,一般无需对链路加密。

步骤一:为RDS MySQL开启SSL加密

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据安全性

  3. SSL页签下,单击未开通前面的滑块开关。

    说明

    如果没有找到SSL页签,请重新确认本文的前提条件

  4. 在弹出的对话框中选择要开通SSL加密的地址,单击确定,开通SSL加密。

    您可以根据需要,选择加密内网链路或者外网链路,但只可以选择一条链路。

  5. 开通SSL加密需要约1分钟,您可以手动刷新页面查看实例状态。

步骤二:下载CA证书

如果不使用CA证书,您也可以通过SSL加密连接RDS MySQL。但建议您下载并使用CA证书,它可以在SSL握手阶段验证收到的服务器证书,以确认RDS MySQL的身份,避免中间人攻击。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据安全性

  3. SSL页签下,单击下载CA证书

    下载的文件为压缩包,包含如下三种CA文件:

    • PEM文件:适用于绝大部分场景。

    • JKS文件:PEM格式CA证书通常需要导入到truststore,即转换为JKS文件才能在Java中使用。您可以在Java程序中使用此JKS文件,密码为apsaradb。

    • p7b文件:适用于少数要求PKCS #7证书文件的Windows应用。

步骤三:从客户端连接RDS MySQL

开启SSL加密后,客户端和RDS MySQL之间的连接是否加密与客户端的类型和设置有关。例如,客户端可能默认采用加密连接。您可以修改客户端的设置或代码,要求建立加密连接以及验证RDS MySQL的身份。

命令行

对于MySQL 5.7.11及以后版本的客户端,在连接命令中添加–ssl-mode选项可以设置SSL加密。

说明

对于MariaDB客户端以及MySQL 5.7.11之前的客户端,请使用–ssl和–ssl-verify-server-cert等选项。具体请参见MariaDB和MySQL官方文档。

  • –ssl-mode=DISABLED表示连接不加密。

  • –ssl-mode=PREFERRED或者不添加–ssl-mode选项,表示尝试加密连接,如果无法加密则采用非加密连接。

  • –ssl-mode=REQUIRED,表示必须加密连接,如果无法加密则连接失败。

  • –ssl-mode=VERIFY_CA,表示必须加密连接,并用本地的CA证书验证服务器证书是否有效。

  • –ssl-mode=VERIFY_IDENTITY,表示必须加密连接,并用本地的CA证书验证服务器证书是否有效,并验证服务器证书的主机名或IP地址是否与实际连接的主机名或IP地址匹配。

示例一:尝试加密连接,如果无法加密则采用非加密连接。

mysql -h {RDS连接地址} -u {RDS账号} -p --ssl-mode=PREFERRED

示例二:要求加密连接,并验证服务器证书的有效性。

mysql -h {RDS连接地址} -u {RDS账号} -p --ssl-mode=VERIFY_CA --ssl-ca={CA证书路径}/ApsaraDB-CA-Chain.pem

说明

  • 上述示例里的{RDS连接地址}、{RDS账号}和{CA证书路径}需替换为实际的值。

  • 更多关于–ssl-mode选项的说明,请参见MySQL官方文档。

MySQL Workbench

  1. 打开MySQL Workbench,选择Database > Manage Connections

  2. 填写RDS连接地址和账号密码。

  3. SSL页签下,设置Use SSL参数,指定SSL CA File为下载的PEM格式CA证书,然后单击Test Connection或者OK

    关于Use SSL参数的选项,可以参考命令行连接方式的–ssl-mode说明。

DMS

在DMS中录入RDS MySQL实例时,可设置开启SSL参数。具体操作,请参见云数据库录入。

也可以在已录入的实例上右键,选择编辑实例,然后在高级信息中设置。

应用程序代码

Java

Connector/J(mysql-connector-java)是MySQL官方提供的JDBC驱动程序。本示例使用mysql-connector-java 8.0.19版本作为依赖。


    mysql
    mysql-connector-java
    8.0.19

说明

以下示例代码使用sslMode属性指定SSL模式。mysql-connector-java从8.0.13版本开始支持该属性,如果您使用更早的版本,则需要改为使用useSSL、requireSSL和verifyServerCertificate属性,具体请参见MySQL文档。

示例代码:

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();
            //可按需设置SslMode。关于该属性的选项,请参见命令行连接方式的说明。
            mysqlDS.setSslMode("VERIFY_IDENTITY");
          
            //truststore用于存储CA证书,这里设置truststore类型为JKS。
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            // 请将file:/后面的路径改为您的ApsaraDB-CA-Chain.jks文件的路径。
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\ApsaraDB-CA-Chain\ApsaraDB-CA-Chain.jks");
            // 下载的JKS文件的密码为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)

更多操作

更新服务器证书

RDS MySQL服务器证书有效期为1年,证书到期后不更新,会导致使用加密连接的客户端程序无法正常连接实例。即将到期时,阿里云将会通过短信、邮件、站内信(事件中心)的方式进行提醒,并会在特定时间段自动更新该证书。您可以通过配置计划时间配置自定义证书更新时间。更多信息,请参见计划内事件。您也可以通过以下方式手动更新服务器证书的有效期。

说明

服务器证书自动更新后,使用加密连接的客户端程序无需重新下载和配置CA证书即可正常连接数据库。

重要

MySQL 8.0版本更新证书不会重启实例,MySQL 5.6、5.7版本更新证书会重启实例。

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
  2. 在左侧导航栏单击数据安全性

  3. 选择SSL页签,单击更新有效期

查看连接加密情况

  • 查看当前会话使用的密码套件。如果返回的Value不为空,表示当前连接是加密的。

    SHOW STATUS LIKE 'Ssl_cipher';
  • 查看当前会话使用的SSL/TLS版本。

    SHOW STATUS LIKE 'Ssl_version';
  • 如果是MySQL命令行,还可以执行\s来查看当前连接是否加密。如果当前为加密连接,返回的SSL值为当前使用的密码套件。

强制加密连接

设置服务端只允许加密连接

目前不支持。

设置客户端只允许加密连接

以命令行为例,在连接命令中设置SSL模式为REQUIRED、VERIFY_CA或VERIFY_IDENTITY,表示只允许加密连接,如果无法加密,则连接失败。

设置特定用户只允许加密连接

例如,以下命令用于设置testuser账号只允许加密连接。

ALTER USER 'testuser'@'%' REQUIRE SSL;

查看CA证书内容

执行以下命令可以查看CA证书的内容。

openssl x509 -in {CA证书路径}/ApsaraDB-CA-Chain.pem -text

关闭SSL加密

重要

关闭SSL加密会重启RDS实例,系统会触发主备切换降低影响,但仍建议您在业务低峰期操作。

    1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
    2. 在左侧导航栏单击数据安全性

    3. 选择SSL标签页。

    4. 单击已开通前面的开关,在弹出的提示框中单击确定

    常见问题

    功能咨询

    • Q1:如何实现双向验证?即除了验证服务端身份,也验证客户端身份。

      A:RDS MySQL目前不支持在SSL握手时验证客户端身份。您可以通过白名单设置、账号管理来实现访问控制。

    • Q2:如何加密读写分离地址?

      A:请参见设置独享代理SSL加密。

    故障排查

    Java程序连接报错Javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints

    jdk7和jdk8若不修改jdk安全配置,可能会报此错误,其他类似报错,一般也都由Java安全配置导致。

    需要修改默认的jdk安全配置,在应用程序所在主机的jre/lib/security/Java.security文件中,修改如下两项配置:

    jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
    jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

    Java程序连接报错javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

    Connector/J 8.0.18或更早版本连接到MySQL 5.6或5.7时,因为兼容性原因禁用了TLS 1.2和更高版本。您可以通过以下任一方式解决该问题。

    • 使用Connector/J 8.0.19或更高的版本。

    • 升级至RDS MySQL 8.0版本。

    • 在代码中指定TLS版本,例如指定enabledTLSProtocols或tlsVersions属性值为TLSv1.2。

    相关API

    • DescribeDBInstanceSSL – 查询RDS实例的SSL配置

    • ModifyDBInstanceSSL – 修改RDS实例的SSL配置

    内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家

    阿里云企业补贴进行中: 马上申请

    腾讯云限时活动1折起,即将结束: 马上收藏

    同尘科技为腾讯云授权服务中心。

    购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠

    转转请注明出处:https://www.yunxiaoer.com/154461.html

    (0)
    上一篇 2023年12月9日
    下一篇 2023年12月9日
    详情页2

    相关推荐

    • 腾讯云TDSQL-C MySQL版备份与回档费用说明

      本文为您介绍备份与回档的费用说明。 计费 备份存储空间:备份文件会占用一定的存储空间。备份方式包括自动备份和手动备份,备份对象包括 binlog 备份和数据备份,以上占用的空间均会算入此计费项。说明备份空间暂时免费,随着业务发展和功能逐渐完善,未来可能实行商业化计费,我们将另行通知。回档:TDSQL-C MySQL 版支持根据备份文件或时间点回档到原集群或回…

      腾讯云 2023年12月9日
    • 腾讯云云函数(SCF)SCF + Ckafka 实现数据转储至 ES-云淘科技

      操作场景 随着 Kafka 社区的繁荣,越来越多的用户开始使用 Kafka 来进行日志收集、大数据分析、流式数据处理等操作。而腾讯云消息队列 Ckafka 也借助了开源社区的力量,进行了如下优化:基于 ApacheKafka 的分布式、高可扩展、高吞吐。100%兼容 Apache KafkaAPI(0.9及0.10)。无需部署,直接使用 Kafka 所有功能…

      2023年12月9日
    • 腾讯云TDSQL-C MySQL版自动读写分离介绍

      本文主要介绍 TDSQL-C MySQL 版数据库代理服务的自动读写分离、功能优势、读写分离路由规则。 自动读写分离 目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压力,可以创建一个或多个只读实例,利用只读实例满足大量的…

      2023年12月9日
    • 腾讯云容器服务TKE 云原生监控于2022年5月16日10:00(北京时间)下线通知同尘科技

      感谢您对腾讯云原生监控 TPS 的认可与信赖,为提供更优质的服务和更强大的产品能力,TPS 与原腾讯云 Prometheus 监控服务进行融合和升级,升级为 TMP。TMP 支持跨地域跨 VPC 监控,支持统一 Grafana 面板对接多监控实例实现统一查看。TMP 计费详情见 按量计费,相关云资源使用详情见 计费方式和资源使用。若您只使用基础监控的 免费指…

      腾讯云 2023年12月9日
    • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
    • 腾讯云Serverless应用中心自定义域名及 HTTPS 访问配置-同尘科技

      通过 Serverless Component 快速构建一个 Serverless Web 网站服务后,如果您希望配置自定义域名及支持 HTTPS 的访问,则可以按照本文提供的两种方案快速配置。 前提条件 已经部署了网站服务,获取了 COS/API 网关的网站托管地址。具体部署方法参考 部署 Vue.js+Express.js 全栈应用 或 快速部署 Hex…

      腾讯云 2023年12月9日

    联系我们

    400-800-8888

    在线咨询: QQ交谈

    邮件:admin@example.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注微信
    本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。