MSSQL - 最佳实践 - 使用SSL加密连接

author: 风移

摘要

在SQL Server安全系列专题月报分享中,往期我们已经陆续分享了:如何使用对称密钥实现SQL Server列加密技术使用非对称密钥实现SQL Server列加密使用混合密钥实现SQL Server列加密技术列加密技术带来的查询性能问题以及相应解决方案行级别安全解决方案SQL Server 2016 dynamic data masking实现隐私数据列打码技术使用证书做数据库备份加密SQL Server Always Encrypted这八篇文章,直接点击以上文章前往查看详情。本期月报我们分享SQL Server SSL证书连接加密技术,实现网络上传输层连接加密。

问题引入

在SQL Server关系型数据库中,我们可以使用透明数据加密(TDE)、行级别加密(Row-level Security)、数据打码(Dynamic Data Masking)和备份加密(Backup Encryption)等技术来实现数据库引擎层的安全。但是,在网络传输层,客户端和服务端之前默认没有数据加密传输保护。因此,为了提高链路安全性,我们可以启用SSL(Secure Sockets Layer)加密,SSL在传输层对网络连接进行加密,能提升数据通道的安全性,但同时会增加网络连接响应时间和CPU开销。

准备工作

为了方便观察,我们使用Microsoft Network Monitor 3.4(以下简称MNM)工具来观察网络传输层事件,如果您已经安装MNM,请跳过该准备工作部分。
首先,我们从微软官网下载MNM,根据需要下载对应的版本,我们这里下载64 bit版本,NM34_x64.exe。
接下来,安装MNM,直接执行NM34_x64.exe,然后按照向导完成安装。
最后,重启OS。

启用SSL证书之前

在启用SSL证书加密之前,客户端和SQL Server服务端的网络传输层默认没有加密保护的,我们可以通过如下步骤验证。
? 创建测试表
? 新建MNM抓取
? 连接查询测试
? MNM中检查
? 动态视图查看加密状态

创建测试表

为了测试方便,我们首先创建测试表CustomerInfo,存入三个客户敏感信息,包含客户名称和客户电话号码。

USE [TestDb]
GO
IF OBJECT_ID(‘dbo.CustomerInfo‘, ‘U‘) IS NOT NULL
    DROP TABLE dbo.CustomerInfo
CREATE TABLE dbo.CustomerInfo
(
CustomerId        INT IDENTITY(10000,1)    NOT NULL PRIMARY KEY,
CustomerName    VARCHAR(100)            NOT NULL,
CustomerPhone    CHAR(11)                NOT NULL
);

-- Init Table
INSERT INTO dbo.CustomerInfo
VALUES (‘CustomerA‘,‘13402872514‘)
,(‘CustomerB‘,‘13880674722‘)
,(‘CustomerC‘,‘13487759293‘)
GO

新建MNM抓取

打开MNM,点击New Capture,然后Start,启动网络层时间抓取。

连接查询测试

从客户端,连接上对应的SQL Server,执行下面的查询语句,以便观察MNM抓取情况。

USE [TestDb]
GO
SELECT * FROM dbo.CustomerInfo WITH(NOLOCK)

执行结果如下:

MNM中检查

我们仔细观察MNM中的事件,发现在客户机和SQL Server服务端的网络传输层,使用的明文传输,如下截图:

从图中右下角红色方框中,我们可以清清楚楚的看到了这三个客户的姓名和对应的手机号码,我们使用MNM看到数据在网络传输层以明文传送,并未做任何加密,可能会存在数据被窃听的风险。

动态视图查看连接状态

当然,您也可以从SQL Server的连接动态视图看出,连接并未加密:

从MNM和SQL Server动态视图我们可以得出相同的结论是:客户端和SQL Server服务端数据在网络传输层默认以明文传送,并未加密传输,可能会存在数据被窃听的风险。那么,我们可以启动SSL证书来加密数据传输,以达到更为安全的目的。

启用SSL证书

启动SSL证书,分为以下几个部分:
? 证书申请
? 强制所有连接使用SSL
? 加密特定客户端连接

证书申请

Start –> 输入:mmc.exe -> File -> Add/Remove Snap-ins -> Certificate -> add -> Computer account -> Next -> Local Computer -> Finish -> OK

展开Certificates -> 右键 Personal -> 选择 All Tasks -> 选择Request New Certificate -> 点击 Next -> 选中 Computer -> 点击Enroll -> 点击Finish。
右键点击对应证书 -> 选中All Tasks -> 选择Manage Private Keys… -> 授予 read 权限给本地账号NT ServiceMSSQLSERVER。

强制所有连接使用SSL

强制所有连接加密

在SQL Server服务器上,Start -> Run -> sqlservermanager13.msc -> 右键点击Protocols for MSSQLSERVER -> Flags中将Force Encryption设置为Yes -> Certificate选项卡中选择证书 -> OK

重启SQL Service

强制所有连接设置完毕后,如果想要立即生效,请重启SQL Service。 
注意:
这里需要特别注意,如果是目前线上正常运行的应用,请慎重测试后,打开强制所有连接使用SSL。

加密特定客户端连接

当然,您也可以不用打开强制所有的连接使用SSL,转而使用加密特定的客户端连接,这里以SSMS连接工具为例。

客户端导入证书

Start -> Run -> 输入:certmgr.msc -> 右键选择Trusted Root Certification Authorities -> All Tasks -> Import

选择SQL Server服务端生成的证书文件

Next -> Finish -> OK

SSMS启用加密连接

在SSMS连接服务端界面 -> 选择Options

然后选择Encrypt connection

然后,参照“连接查询测试”中方法进行连接测试。同样在连接管理视图中查看,我们可以看到连接已经加密:

至此,使用SSL证书加密加密客户端和SQL Server服务端连接的实验成功。

注意事项

由于使用了SSL证书来加密客户端和SQL Server服务端连接,在提升数据通信的安全性同时,加密解密操作也会导致网络连接响应时间增加和CPU使用率上升,对业务系统有一定的性能影响。因此,建议您仅在外网链路有加密需求的时候启用SSL加密,内网链路相对较安全,一般无需对链路加密。

最后总结

本期月报我们分享了如何启用SSL证书,来加密客户端和SQL Server服务端连接,提升网络传输层通信安全,使得数据在传输过程中被加密后,以密文传送,最大限度保证了链路安全。

如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:[email protected] 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。

原文地址:https://www.cnblogs.com/yaoyangding/p/12013312.html

时间: 2024-10-11 16:56:36

MSSQL - 最佳实践 - 使用SSL加密连接的相关文章

MySQL的SSL加密连接与性能开销

前言 在生产环境下,安全总是无法忽视的问题,数据库安全则是重中之重,因为所有的数据都存放在数据库中.MySQL在5.7版本之前对于安全问题的确考虑并不充分,导致存在比较大的隐患,比如下面的这些问题,可能有些小伙伴知道,有些却还不知道: MySQL数据库默认安装的用户密码为空 所有用户拥有对于MySQL默认安装test数据库的访问权限(即使没有授予权限) 好在Oracle官方也已经意识到安全的重要性,MySQL 5.7开始安装完成后的root用户的密码不再是空,而是在安装时随机产生一个密码,这也导

Mina 在 Spring 中配置同时支持 SSL 加密连接和非 SSL 连接

iOS 的 socket ,那是在很久以前用过,当时编写确实费了一番周折,要忍受 SDK 的不完善. 之后,一直是 Web 服务器支撑着 http 与 https 实现 RestFul 或... 那么好吧,有需要,就行动,重新写一遍,也好过找那三块笔记本硬盘里成堆的工程代码, 目前 SSL 的证书转换学没搞定,需要将 Mina 中使用 keystore 转换成 iOS 可识别的格式,苹果的 APNS 确实使用的不是标准的东西,不能作为参考了, 所以,在研究出来之前,还是得确保链接正常使用,确保业

mysql 加密连接SSL

1.SSL含义 SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层对网络连接进行加密. 2.mysql5.7SSL配置和使用 注意:这种方法只使用5.7,mysql5.6也支持ssl加密连接,但是配置过程比较复杂,需要用到openssl命令来创建各类共秘钥. 我的测试环境默认没有启用SSL,状态为disabled mysql> sho

SSL加密编程(1) 概述

SSL是TCP/IP环境上的标准的安全加密传输协议.SSL的全称是安全的Socket层,它具有与Socket类似的客户端/服务器体制.常见的https即http+ssl,从安全的角度看,https的安全技术就是SSL加密.从建立服务的角度,配置一个web服务器提供https服务,其关键就是获取和设置所需的SSL服务器证书.SSL基本的安全约束是对服务器的验证,这一安全约束被用来防止钓鱼网站仿冒合法的网站,从而防止客户端向假的服务器,如仿冒电子邮件或者网银外观的网站,提供登录口令等敏感数据.注册一

Tomcat JDBC 认证 MySQL SSL加密

最近公司做三级认证,也没怎么更新java博客,近期忙完则更新.其中三级认证有一项感觉很有意思: 一般公司MySQL/Mariadb Tomcat做JDBC认证一般是这样的: db.default.driver=com.mysql.jdbc.Driverdb.default.url="jdbc:mysql://url.to.database/database" db.default.user= "..."     //MySQL用户名 db.default.passw

MySQL主从复制使用SSL加密

环境: CentOS7.4 CA主机一 mysql主机两台 数据库:MariaDB-5.5 一.准备证书文件 1.生成CA自签名证书 mkdir /etc/my.cnf.d/ssl cd /etc/my.cnf.d/ssl openssl genrsa 2048 > cakey.pem chmod 600 cakey.pem openssl req -new -x509 -key cakey.pem -days 3650 -out cacert.pem 2.生成master私钥以及证书申请 op

最佳实践 · 实例级别数据库上云RDS SQL Server

摘要: 摘要 到目前,我们完成了SQL Server备份还原专题系列八篇月报分享:三种常见的数据库备份.备份策略的制定.查找备份链.数据库的三种恢复模式与备份之间的关系.利用文件组实现冷热数据隔离备份方案.如何监控备份还原进度.阿里云RDS SQL自动化迁移上云的一种解决方案以及上个月分享的RDS SDK实现数据库迁移上阿里云,本期我们分享如何将用户线下或者ECS上自建实例级别数据库一键迁移上阿里云RDS SQL Server. 摘要到目前,我们完成了SQL Server备份还原专题系列八篇月报

Tomcat配置https加密连接

配置https安全连接(ssl加密连接) https连接需要用到数字证书与数字签名(MD5算法),网站https连接首先需要申请数字证书,配置加密连接器,浏览器安装证书. 证书运用到RSA技术,RSA加密算法是一种非对称加密算法,服务器保留私钥,对外公开公钥(cer证书). Tomcat秘钥库类型为JKS(Java Key Storage),很容易知道这是 JAVA 的专属格式,利用 JAVA 的一个叫 keytool 的工具可以进行格式转换.一般用于 Tomcat 服务器. 单向认证 生成服务

MsSQL使用加密连接SSL/TLS

说明 应用程序通过未加密的通道与数据库服务器通信, 这可能会造成重大的安全风险.在这种情况下, 攻击者可以修改用户输入的数据, 甚至对数据库服务器执行任意 SQL 命令. 例如,当您使用以下连接字符串时,就可能存在这种风险: <connectionStrings> <add name="Test" connectionString="Data Source=210.10.20.10,1433; Initial Catalog=myDataBase;User