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

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

author: 风移

摘要

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

问题引入

在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,存入三个客户敏感信息,包含客户名称和客户电话号码。markdown

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,启动网络层时间抓取。
01.png网络

链接查询测试

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

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

执行结果以下:
02.pngsqlserver

MNM中检查

咱们仔细观察MNM中的事件,发如今客户机和SQL Server服务端的网络传输层,使用的明文传输,以下截图:
03.png
从图中右下角红色方框中,咱们能够清清楚楚的看到了这三个客户的姓名和对应的手机号码,咱们使用MNM看到数据在网络传输层以明文传送,并未作任何加密,可能会存在数据被窃听的风险。性能

动态视图查看链接状态

固然,您也能够从SQL Server的链接动态视图看出,链接并未加密:
04.png

从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
05.png
展开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
06.png

重启SQL Service

强制全部链接设置完毕后,若是想要当即生效,请重启SQL Service。 
注意:
这里须要特别注意,若是是目前线上正常运行的应用,请慎重测试后,打开强制全部链接使用SSL。

加密特定客户端链接

固然,您也能够不用打开强制全部的链接使用SSL,转而使用加密特定的客户端链接,这里以SSMS链接工具为例。

客户端导入证书

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

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

Next -> Finish -> OK

SSMS启用加密链接

在SSMS链接服务端界面 -> 选择Options
09.png

而后选择Encrypt connection
10.png

而后,参照“链接查询测试”中方法进行链接测试。一样在链接管理视图中查看,咱们能够看到链接已经加密:
11.png

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

注意事项

因为使用了SSL证书来加密客户端和SQL Server服务端链接,在提高数据通讯的安全性同时,加密解密操做也会致使网络链接响应时间增长和CPU使用率上升,对业务系统有必定的性能影响。所以,建议您仅在外网链路有加密需求的时候启用SSL加密,内网链路相对较安全,通常无需对链路加密。

最后总结

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

相关文章
相关标签/搜索