SQL Server 扩展秘钥管理(EKM)

无论是SQL Server 对称秘钥、非对称秘钥管理,还是使用对称秘钥非对称秘钥对数据进行加密解密,以及数据库TDE,我们都有提到EKM(Extensible Key Manager),那么什么是EKM呢?为何要使用EKM呢?请看下文分享。

SQL Server 的EKM 使得第三方EKM/HSM 供应商能够在SQL Server中注册他们的模块。当注册完成后,SQL  Server 用户可以使用存储在EKM模块上的秘钥。这使得SQL Server可以使用这些模块提供的高级功能,如批量加密和解密,钥匙管理函数如钥匙过期和秘钥更替。

SQL Server 结合EKM,使用 MSCAPI(Microsoft Cryptographic API)提供加密和生成秘钥的功能。数据和秘钥的秘钥是在临时的钥匙容器中被创建的,在它们被存储到数据库中之前,它们必须从供应商处输出来。这种方式使得钥匙的管理,包括秘钥层级和钥匙备份,可以由SQL Server处理。

随着遵从法规的需求和对数据隐私的注重,越来越多的组织使用加密作为深度防御的一种方案。这种仅仅通过数据库加密管理工具的方式通常是不现实的。硬件供应商提供了使用HSM(Hardware Security Module)进行企业秘钥管理的产品。HSM设备在硬件或软件中存储秘钥。这是更安全的解决方案,因为秘钥不是寄存在加密数据库中的。

许多供应商都提供了钥匙管理加速加密的HSM。HSM设备使用带有服务器进程的硬件接口作为应用程序和HSM之间的中介。供应商还在其模块上实现MSCAPI 共享模块,这些模块可能是硬件或软件。MSCAPI 通常仅仅提供HSM功能的一个子集。供应商也能提供管理HSM的软件,如钥匙配置和钥匙读取。

HSM的实现因供应商而异,将其和SQL Server结合使用需要通用的接口。尽管MSCAPI提供了这样的接口,其仅仅支持HSM部分功能。同时也有其他限制,例如无法本地持久化对称密钥,以及缺乏面向会话的支持。

如何使用EKM

SQL Server 扩展秘钥管理使得保护数据库文件的加密秘钥可以存储在服务器外的设备,如智能卡、USB或者EKM/HSM 模块中。这同时使得数据保护和数据库管理员相互分离(除sysadmin角色成员外)。数据可以使用仅仅数据库用户才能访问到的外部EMK/HSM 模块上的秘钥进行加密。

扩展秘钥管理(EKM)的优势:

  • 额外的授权检查(使得职权分离)

  • 基于硬件的高性能的加密/解密

  • 外部生成秘钥

  • 外部秘钥存储(数据和钥匙的物理分离)

  • 秘钥检索

  • 外部秘钥滞留(启用秘钥替换)

  • 简化秘钥恢复

  • 分布式是秘钥管理

  • 安全的秘钥清除

您可以为用户名和密码组合或EKM驱动程序定义的其他方法使用可扩展密钥管理。

注意:为了排除故障,微软技术支持可能需要来自EKM供应商的秘钥。你也许需要访问供应商的工具或进程来帮助解决问题。

上面描述可能让您看得云里雾里,现在我们给出一个第三方EKM的实操,让您切身感受EKM的应用。

经过不懈的百度、谷歌,最终找到了三家EKM提供商(可能还有更多):

  • 微软的Azure Key Vault

  • Townsend 的AKM

  • Thale 的Key Management

我首先选择尝试Azure Key Vault,但可惜的是好不容易找到一个外币的信用卡,,却不能使用,不能创建 Azure Active Directory 身份,最终放弃了。而Thale的产品都是要部署到云上,也不适合测试。最终我选择了Townsend 产品。因为Townsend有一款可以将服务搭建到VMware 虚拟机上,这是我想要的,并且其提供了30天免费测试使用。在这里我要感谢帮助我打通虚拟机网络的小伙伴(这个折腾了我一个周末的难题,对我而言)。

Vmware Workstation 安装部署

我的服务器系统是Windows 2012 R2 Datacenter,我选择了Vmware Workstation最新版本 15.5,大家可以从官网中直接下载,下载地址为:

https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html

VMware安装好后,我们可以下载Townsend 的AKM,下载地址为:

https://downloads.townsendsecurity.com/products/AKM_VM.ova

下载完成后,双击下载文件AKM_VM.ova,弹出如下窗口,命名虚拟机名称,及给与虚拟机一个存放路径,点击导入:

等其导入完成后,我们就可以继续操作了。要进行AKM初始化,需要从网络上获取其试用License。所以继续之前,我们要先配置虚拟机,使其能够联网。这里我只做本地测试,没有必要搭建AKM故障转移(在生产环境中最好部署),所以我选择简单NAT方式联网。

具体配置虚拟机NAT方式联网的方法,网上太多案例,这里就不赘述了。我仅仅给出我遇到问题,以供大家参考。

1. VMware 虚拟机要能够连外网,要开启外网Internet连接共享,并且“家庭网络连接(H)”的文本框中要选择用于NAT联网的VMware Network Adapter VMnet 8虚拟网卡:

 

2. 宿主机器无法连接虚拟机,需要在VMware Network Adapter VMnet8 属性→Internet 协议版本4(TCP/IPv4)属性→高级TCP/IP设置中添加与虚拟机中同段的IP即可:

 

登录VM虚拟机

当你看见命令行出现登录提示符时,输入用户“admin”,然后按“Enter”键,输入初始密码“OOHXPq6r530N6re”。后面你可以修改它,现在直接使用即可。

确定IP地址

你需要确定并记录下AKM的IP地址,这将会在后面客户端应用AKM Administrative Console及Key Connection for SQL Server配置时用到。使用ifconfig命令确定分配给这个VMware实例的地址。在命令行输入“ifconfig”并且回车。您将会看到包含下面信息的输出:

 

初始化AKM

在命令行中输入akm-menu回车,即会跳出如下AKM管理菜单:

我选择1,初始化AKM,然后会跳出如下初始化菜单:

我们仍然选择1,作为主AKM初始化,接着会要求你设置你所在的国家简称,省市,以及您的组织名称,最后为您的AKM命名:

是否创建默认的秘钥集,当然这个你可以后面创建,这里我选择现在创建,输入y:

回车后,AKM开始初始化,几分钟后即完成:

 

修改AKM初始密码

AKM初始化后,会有一个新的菜单:

下面来修改admin密码,我将原始密码修改为 I25cUcbyQpae

注意,要保管好该密码,AKM服务的登陆,以及其管理都会用到此密码

 

 

Web管理界面导出初始秘钥集

前面AKM虚拟机上配置的IP地址为192.168.0.128,默认的端口为3886,我们输入https:\\192.168.0.128:3386\,即会弹出登陆界面。使用AKM的账户、密码(这里是admin,及新密码I25cUcbyQpae)登陆后,到文件管理(File Manager)下→home→admin→downloads,下载秘钥及证书供AKM Administrative Console及Key Connection for SQL Server 配置使用。

 

安装配置AKM Administrative Console

AKM管理控制台是秘钥创建、激活、导入导出、删除等管理平台。

下载安装AKM 管理控制台,可以参考其官网文档:

https://docs.townsendsecurity.com/akm_administrative_console_guide/#top

这里需要注意的是,服务名称要使用我们AKM初始时给其的名字,服务器地址填写AKM所在虚拟机的地址192.168.0.128,服务的默认端口是6001.而Key Store File、Trust Store File及Pass Phrase均在从导出的初始秘钥集中导入,下面两幅图中标出了对应关系,图一的1对应图二的1, 依次

 

安装配置Key Connection for SQL Server

下载地址

Key Connection for SQL Server 是AKM服务和SQL Server数据库之间的桥梁。

安装如正常的软件安装一样,这里我们说明一下配置中需要注意的地方:

首先将AKM服务产生的证书AKMRootCACertificate.pem 导入到服务器受信任的根证书:

我们可以通过控制台导入该证书:

Wind+R→MMC

我们可以通过 Wind+R → cmd→certmgr查看导入的证书:

注意Hostname 中的IP为AKM服务的IP地址。

这里选择我们前面导入服务器的AKM提供的证书。

这里导入的是AKM服务生成的证书和私钥为AKMClientCertificateAndPrivateKey.p12,注意这里密码最好手动输入,因为直接从文件中拷贝的密码中如果有1或l,它可能会识别错误而报密码错误:

注意,这里有两个实例,我只配置了默认实例名为MSSQLSERVER,而没有配置的MSSQL2008后面两个字段值为空。配置完成后,点击右下角的“SQL Server Test” ,会生成一个dll文件,如果一切顺利,将会出现下面成功的结果:

 

对称/非对称秘钥生成及应用

我们将在AKM的控制台中创建对称/非对称秘钥

首先我们来创建非对称秘钥:进入All Commands下,选择Create Symmetric Key,如下图,将我们的非对称秘钥命名为SymFromAKM,秘钥长度我选择了256位,并立即计划秘钥,并设置对称秘钥的其他属性:

点击“Submit”,创建完成。

接着创建非对称秘钥,同样在All Commands下,这次选择Create EKM Key,将其命名为AKM_EKM,长度选择2048位:

创建完成后,物理是对称秘钥还是非对称秘钥,均需要在EKM中启用秘钥,如下:

现在我们可以使用这两个秘钥了。

在SQL Server中,要使用EKM,先要在配置中启用它,启用脚本如下:

sp_configure 'show advanced', 1 
GO 
RECONFIGURE 
GO 
sp_configure 'EKM provider enabled', 1 
GO 
RECONFIGURE 
GO 

创建对称秘钥

USE test
GO

CREATE SYMMETRIC KEY SymFromEKM 
FROM PROVIDER KeyConnection_test 
WITH PROVIDER_KEY_NAME='SymFromAKM', 
  CREATION_DISPOSITION=OPEN_EXISTING; 
GO

对称秘钥的简单数据加密、解密的应用:

DECLARE @EncTxt VARBINARY(MAX)
SELECT  @EncTxt = ENCRYPTBYKEY(KEY_GUID('SymFromEKM'), 'text')
SELECT  @EncTxt
SELECT  CONVERT(VARCHAR(10), DECRYPTBYKEY(@EncTxt))

创建非对称秘钥

USE master;
CREATE ASYMMETRIC KEY AsyKeyForDBEncryption 
FROM PROVIDER KeyConnection_test
WITH PROVIDER_KEY_NAME = 'AKM_EKM'
, CREATION_DISPOSITION = OPEN_EXISTING;

更改TDE中数据库秘钥的加密方式,直接使用EKM中的非对称秘钥 AsyKeyForDBEncryption:

ALTER DATABASE ENCRYPTION KEY
   REGENERATE WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER
   ASYMMETRIC KEY AsyKeyForDBEncryption

如果您正在为数据库数据加密秘钥的安全问题和管理难度方面而困扰,使用EKM将是您的一个不错选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值