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()
相关推荐
Decay__4 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说8 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场9 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
长不大的杨瑞杰9 小时前
OpenCode v2 会话可靠性实战:Snapshots、Compaction、Instructions 与 Formatters
人工智能·安全·云计算·软件工程·devops
Decay__10 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
陆圣杰11 小时前
代码分享之前,先用假数据练一次凭据检查
安全
心梦缘-雪雁11 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk12 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
Angeldream12312 小时前
第 10 章 医学影像伦理与安全
图像处理·人工智能·python·安全·机器学习·医学影像
GeW12 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库