目录

1. 为RDS SQL Server开启SSL加密、设置保护地址

2. 下载SSL CA证书

3. 配置SSL CA证书

3.1 导入证书

3.2 SSMS配置

附录:通过SSL连接数据库示例代码


1. 为RDS SQL Server开启SSL加密、设置保护地址

参数

是否必选

说明

请选择受保护地址:

选择要开通SSL加密的链路。支持加密内网链路和外网链路,但仅允许加密一条链路。

说明

选择加密外网链路时,需确保实例已开通外网地址

是否开启强制加密

开启后将强制客户端以加密方式连接SQL Server内外网链路,且连接无需上传CA证书,不再支持非加密连接方式。

说明

仅实例网络类型为专有网络(VPC)时,才支持开启强制加密。

支持最低TLS版本

选择支持的最低TLS版本,当前支持TLS版本为1.0、1.1和1.2,低于该版本将被拒绝连接。

例如,选择TLS 1.1,则表示服务端仅接受TLS 1.1和1.2协议版本的客户端连接请求,通过TLS 1.0建立连接的客户端会被拒绝连接。

2. 下载SSL CA证书

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

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧菜单栏中单击数据安全性

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

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

    • p7b文件:用于Windows系统中导入CA证书。

    • PEM文件:用于其他系统或应用中导入CA证书。

    • JKS文件:Java中的truststore证书存储文件,密码统一为apsaradb,用于Java程序中导入CA证书链。

3. 配置SSL CA证书

在RDS SQL Server实例中开启SSL加密后,应用端或客户端在连接实例时需要配置SSL CA证书。本文以Microsoft SQL Server Management Studio(SSMS)为例,介绍SSL CA证书安装方法。其它应用或者客户端请参见对应产品的使用说明。

3.1 导入证书

  1. 在桌面左下角搜索框中输入certmgr.msc并打开。

  2. certmgr对话框中,鼠标右击受信任的根证书颁发机构

  3. 选择所有任务 导入

4.单击下一步

5. 在证书导入向导页面中,单击浏览导入已下载的SSL CA证书,并单击下一步

6. 选择证书存放位置后,单击下一步

7.单击完成等待证书导入。

3.2 SSMS配置

  1. 打开SQL Server Management Studio,单击对话框右下角选项按钮。

    image.png

  2. 连接属性选项卡中,勾选加密连接信任服务器证书,并单击连接按钮。

    image.png

3. 执行如下查询,若查询结果为TRUE,则说明连接已加密。

SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID

附录:通过SSL连接数据库示例代码

C#示例:

using System;
using System.Data.SqlClient;

namespace SqlConnectionSSLExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 建立连接
            // Data Source指定目标SQL Server数据库服务器的地址;Initial Catalog指定连接的目标数据库名称;User ID指定连接数据库所需的用户名;Password指定连接数据库所需的密码;Encrypt指定是否启用SSL加密传输,值为true表示启用。
            string connectionString = "Data Source=rm-2ze********.sqlserver.rds.aliyuncs.com;Initial Catalog=master;User ID=zhttest;Password=zht****;Encrypt=true;";
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                // 打开连接
                connection.Open();
                try
                {
                    // 执行SQL查询
                    SqlCommand cmd = new SqlCommand("SELECT @@version", connection);

                    string result = cmd.ExecuteScalar().ToString();

                    Console.WriteLine(result);
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"Error: {ex.Message}");
                }
            }
        }
    }
}

Python示例

# -*- coding:utf-8 -*-

import ssl
import pyodbc

# 创建一个SSL上下文,用于在Python中建立安全的SSL连接
context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile="D:\ca\ApsaraDB-CA-Chain.pem")

# 建立连接
# SERVER指定目标数据库服务器的地址;DATABASE指定连接的数据库名称;UID指定登录数据库所需的用户名;PWD指定登录数据库所需的密码;Encrypt指定是否启用SSL加密,值为yes表示启用。
conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=rm-2zec********.sqlserver.rds.aliyuncs.com;DATABASE=master;UID=zhttest;PWD=zht****;Encrypt=yes', ssl=context)
cursor = conn.cursor()
cursor.execute('SELECT @@version')

rows = cursor.fetchall()

for row in rows:
    print(row)

# 关闭连接
conn.close()

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐