tencent cloud

文档反馈

设置 SSL 加密

最后更新时间:2024-01-26 15:43:04

    SSL 加密概述

    SSL(Secure Sockets Layer)认证是客户端到云数据库服务器端的认证,表示对用户和服务器进行认证。开通 SSL 加密,可获取 CA 证书,将 CA 证书上传在服务器端,在客户端访问数据库时,将激活 SSL 协议,在客户端和云数据库服务器端之间建立一条 SSL 安全通道,实现数据信息加密传输,防止数据在传输过程中被截取、篡改,保证双方传递信息的安全性。
    SSL 协议要求建立在可靠的传输层协议(TCP)之上,其优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP、FTP、TELNET 等)能透明地建立于 SSL 协议之上。SSL 协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作,在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。

    背景

    SSL 是 Netscape 公司所提出的安全保密协议,通过在浏览器和 Web 服务器之间构建安全通道来进行数据传输,采用 RC4、MD5、RSA 等加密算法实现安全通讯。国际互联网工程任务组(IETF)对 SSL 3.0进行了标准化,标准化后更名为安全传输层协议(TLS)。由于 SSL 这一术语更为常用,因此本文所述 SSL 加密实际是指 TLS 加密。
    说明:
    腾讯云数据库支持的 TLS 版本为1.0、1.1和1.2。
    使用非加密方式连接数据库时,在网络中传输的所有信息都是明文,因此存在被非法用户截取、篡改、冒充的三大风险;而 SSL 协议是为解决这三大风险而设计的,理论上可达到:
    信息是加密传播,第三方无法截取。
    具有校验机制,一旦被篡改,通信双方会立刻发现。
    配备身份证书,防止身份被冒充。
    云数据库 SQL Server 支持开启 SSL 加密来增强链路安全性,并支持下载和安装 SSL CA 证书到需要的应用服务。
    注意:
    SSL 加密不保护数据本身,是确保来往于客户端和云数据库服务器端之间的流量安全,在传输层对网络连接进行加密,能够提升通信数据的安全性和完整性,但会同时增加网络连接响应时间。

    支持架构及版本

    云数据库 SQL Server 所有架构及版本的数据库实例均支持设置 SSL 加密,其中,只读实例无需单独设置,主实例开启 SSL 加密后,其只读实例会同步生效。
    注意:
    若您对主实例设置 SSL 并选择在维护时间内执行,则主实例关联的只读实例的 SSL 生效时间会跟随主实例,在主实例的维护时间一起重启实例生效。

    注意事项

    开启 SSL 加密后,会造成实例 CPU 使用率上升、读写时延增长。建议仅在外网链路有加密需求时开启 SSL 加密。内网链路相对较安全,通常无需对链路加密。
    开启 SSL 加密、更新腾讯云提供的 SSL 证书或关闭 SSL 加密操作,会重启数据库实例,实例可能会有几分钟不可用的情况,因此,操作前请您确保业务具备重连机制,建议在业务低峰期操作。
    SSL 的证书具有有效期(1年),请在到期前在控制台 手动更新证书的有效期,否则,使用 SSL 加密连接的客户端程序将无法正常连接。
    SSL 的证书到期后不更新,仅会导致使用加密连接的客户端程序无法正常连接实例,而不会影响实例的正常运行或数据安全。
    关闭 SSL 加密后,仅支持通过非 SSL 加密方式连接实例。

    开启 SSL 加密

    2. 选择地域,在实例列表单击需要开启 SSL 的实例 ID操作列的管理
    3. 实例管理页选择数据安全 > SSL 加密,然后在 SSL 加密状态后单击按钮开启功能。
    
    4. 在弹窗下选择执行时间,单击确认
    
    证书来源:默认使用腾讯云提供的证书。
    执行时间:
    立即执行:单击确认后立即开启 SSL 加密。
    维护时间内:在实例维护时间内开启 SSL 加密,在实例详情页可 修改实例维护时间
    说明:
    开启 SSL 加密时,有关实例相关状态变化的详细说明请参见 附录1
    开启 SSL 加密过程中,会重启您的数据库实例,请确保业务具备重连机制。
    5. 
    成功开启后
    ,界面如下。
    
    需注意,配置客户端 CA 证书为可选设置,用于客户端信任服务端。单击下载 CA 证书,可下载证书并用于配置安装到客户端。
    下载的文件为压缩包(TencentDB-SSL-CA.zip),包含如下三个文件:
    p7b 文件:用于 Windows 系统中导入 CA 证书。
    jks 文件:Java 中的 truststore 证书存储文件,密码统一为 tencentdb,用于 Java 程序中导入 CA 证书链。
    pem 文件:用于其他系统或应用中导入 CA 证书。

    SSL 客户端连接登录

    开启 SSL 加密后,客户端在连接登录云数据库 SQL Server 实例时,分为信任服务器证书和不信任服务器证书两种场景。若信任服务器证书,则不需要配置 SSL CA 证书即可进行加密连接;若不信任服务器证书,则需要导入并配置 SSL CA 证书后,进行加密连接。

    场景一:加密连接且信任服务器证书

    步骤1:加密连接登录
    1. 打开 SQL Server Management Studio 客户端,单击对话框右下角的选项
    
    2. 在连接属性选项卡中,勾选加密连接信任服务器证书,并单击连接
    
    步骤2:检查连接是否已加密
    方法一:通过 SSMS 客户端界面
    方法二:通过指令
    1. 通过 SSMS 成功连接登录后,在实例上右击选择属性。
    
    2. 在弹出的服务属性页面上,点击左侧的查看连接属性。
    
    3. 在弹出的连接属性页面上,可以查看连接是否被加密。
    
    执行如下查询命令,若查询结果为 TRUE,则说明连接已加密,若查询结果为 FALSE,则说明连接未加密。
    SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID;

    场景二:加密连接且不信任服务器证书

    步骤1:下载 CA 证书
    开启 SSL 加密后,在目标实例详情页面 > 数据安全 > SSL 加密下,单击 下载 CA 证书
    步骤2:客户端导入 CA 证书
    方法一:通过本地客户端界面
    方法二:通过指令
    1. 单击桌面左下角搜索框,输入 certmgr.msc 打开证书管理器。
    
    2. 在 certmgr 对话框中,鼠标右键单击受信任的根证书颁发机构,选择所有任务 > 导入
    
    3. 单击下一步
    
    4. 在证书导入向导页面中,单击浏览导入已下载的 SSL CA 证书,并单击下一步
    
    5. 选择下载到本地的 TencentDB-SSL-CA 证书文件,单击打开
    
    6. 按个人需要选择证书存放位置后,单击下一步,然后单击完成
    
    您也可以通过指令导入 SSL CA 证书,例如,通过 CMD 或者 PowerShell 执行以下指令来导入证书。
    CERTUTIL -addstore -enterprise -f -v root "ca.p7b"
    步骤3:加密连接登录
    1. 打开 hosts 文件,文件路径为 C:\\Windows\\System32\\drivers\\etc。
    2. 在 hosts 文件最后一行增加 IP mssql-*******。
    
    说明:
    IP:替换成对应实例的内网 IP 或者外网 IP。
    mssql-*******:替换成对应实例 ID。
    3. 打开 SQL Server Management Studio 客户端,单击对话框右下角的选项
    
    4. 在连接属性选项卡中,勾选加密连接,并单击连接
    
    步骤4:检查连接是否已加密
    方法一:通过 SSMS 客户端界面
    方法二:通过指令
    1. 通过 SSMS 成功连接登录后,在实例上右击选择属性。
    
    2. 在弹出的服务属性页面上,点击左侧的查看连接属性。
    
    3. 在弹出的连接属性页面上,可以查看连接是否被加密。
    
    执行如下查询命令,若查询结果为 TRUE,则说明连接已加密,若查询结果为 FALSE,则说明连接未加密。
    SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID

    更新证书有效期

    说明:
    SSL 的证书具有有效期(1年),到期前您需手动更新证书,以确保使用 SSL 加密连接的客户端程序可以继续正常连接。
    更新 SSL 证书过程中,会重启您的数据库实例以加载新的 SSL 证书,请确保业务具备重连机制。
    2. 选择地域,在实例列表单击目标 SSL 的实例 ID操作列的管理
    3. 实例管理页选择数据安全 > SSL 加密,然后在 SSL 证书有效性后单击更新证书
    4. 在弹窗下选择执行时间,单击确认
    
    执行时间:
    立即执行:单击确认后立即更新 SSL 证书。
    维护时间内:在实例维护时间内更新 SSL 证书,在实例详情页可 修改实例维护时间

    关闭 SSL 加密

    说明:
    关闭 SSL 加密过程中,会重启您的数据库实例,请确保业务具备重连机制。
    2. 选择地域,在实例列表单击需要关闭 SSL 的实例 ID操作列的管理
    3. 实例管理页选择数据安全 > SSL 加密,然后在 SSL 加密状态后单击按钮关闭功能。
    
    4. 在弹窗下选择执行时间,单击确认
    执行时间:
    立即执行:单击确认后立即关闭 SSL 加密。
    维护时间内:在实例维护时间内关闭 SSL 加密,在实例详情页可 修改实例维护时间

    附录1:设置 SSL 时实例相关状态变化

    设置 SSL 时,如果执行时间选择为维护时间内,系统会以10分钟每次的频率检查设置 SSL 的相关操作是否命中维护时间窗口,命中后,系统开始部署或关闭 SSL,完成后会立即重启服务。
    说明:
    如果用户设置了维护时间内操作 SSL,在未到达维护时间窗口时,目标实例状态是非运行状态,这期间此实例不能再发起其他任务,直到 SSL 加密任务完成。
    示例
    假设维护时间窗口为17:00-18:00,用户在17:05分设置了在维护时间窗口内开启 SSL 加密,则系统会在17:10启动异步调度任务,成功部署 SSL 证书后会立即重启服务。

    实例状态变化说明

    执行时间选择为维护时间内的实例状态变化如下:
    17:05之前,实例状态为运行中
    17:05-17:10之间,主实例和 RO 副本实例的状态为实例 SSL 操作中
    17:10之后,主实例和 RO 副本实例的状态为任务执行中
    直到异步任务完成后,主实例和 RO 副本实例的状态才会变回运行中
    执行时间选择为立即执行的实例状态变化如下:
    通过控制台发起 SSL 操作任务之后,主实例和 RO 副本实例,状态均变为任务执行中,直到异步任务完成后,状态才变回运行中

    实例 SSL 操作状态变化说明

    开启 SSL 时实例操作状态的变化如下:
    执行时间为立即执行:未开启->开启中->已开启
    执行时间为维护时间内:未开启->等待维护时间窗口内开启->开启中->已开启
    更新证书时实例操作状态的变化如下:
    执行时间为立即执行:已开启->更新中->已开启
    执行时间为维护时间内:未开启->等待维护时间窗口内更新->更新中->已开启
    关闭 SSL 时实例操作状态的变化如下:
    执行时间为立即执行:已开启->关闭中->已关闭
    执行时间为维护时间内:已开启->等待维护时间窗口内关闭->关闭中->已关闭

    常见问题

    如何查看当前连接是否已启用了 SSL 加密连接?

    可通过如下命令,查询 sys.dm_exec_connections 系统动态管理视图,来查看当前连接是否已启用了 SSL 加密连接:
    SELECT session_id,encrypt_option
    FROM sys.dm_exec_connections;
    GO
    如果在查询 sys.dm_exec_connections 系统动态管理视图时,返回当前连接的会话 ID,并且 encrypt_option 的值为 true,则说明该连接已经成功启用了 SSL 加密。

    为什么客户端程序去年还可以连接,今年无法正常连接了?

    SSL 的证书具有有效期,有效期为1年,可能是到期了,需要手动更新证书有效期,详细操作参见 更新证书有效期
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持