SQL Server 数据库 的通信加密配置SSL安全连接

目录

[1. 为RDS SQL Server开启SSL加密、设置保护地址](#1. 为RDS SQL Server开启SSL加密、设置保护地址)

[2. 下载SSL CA证书](#2. 下载SSL CA证书)

[3. 配置SSL CA证书](#3. 配置SSL CA证书)

[3.1 导入证书](#3.1 导入证书)

[3.2 SSMS配置](#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.单击下一步

  1. 证书导入向导 页面中,单击浏览 导入已下载的SSL CA证书,并单击下一步
  1. 选择证书存放位置后,单击下一步

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

3.2 SSMS配置

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

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

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

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

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

C#示例:

cs 复制代码
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示例

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()
相关推荐
爱可生开源社区1 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1772 天前
《从零搭建NestJS项目》
数据库·typescript
一次旅行2 天前
网络安全总结
安全·web安全
加号32 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏2 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐2 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
red1giant_star2 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
百锦再2 天前
Django实现接口token检测的实现方案
数据库·python·django·sqlite·flask·fastapi·pip
tryCbest2 天前
数据库SQL学习
数据库·sql
jnrjian2 天前
ORA-01017 查找机器名 用户名 以及library cache lock 参数含义
数据库·oracle