4

我正在使用 SQL Server 的 Always Encrypted 功能使用受自签名证书保护的主密钥来加密数据库中的几列。该证书是使用 SQL 2016 的 Management Studio 创建的,并且始终默认为比颁发日期提前一年的到期日期 - 它存储在当前用户的 Windows 证书存储中。

是否可以将此证书的有效期延长至一年以上?

更具体地说,是否可以编写 AE 所需的证书 - 据我了解,此证书与 CREATE CERTIFICATE 命令创建的 sql 证书不同,需要导出为 pfx 等文件格式才能被 Azure Web 应用程序访问。

此外,如果证书已过期,数据是否仍可加密/解密?

4

3 回答 3

3

SQLmojoe 包含在答案中的创建证书 SQL 语句不适用于 AE。

您可以使用脚本(批处理)并调用 makecert 以编程方式创建证书,例如:

Makecert.exe -n "CN=Always Encrypted cert" -pe -sr CurrentUser -r -eku 1.3.6.1.5.5.8.2.2,1.3.6.1.4.1.311.10.3.11 -ss my -sky exchange -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 -len 2048 -a sha256

请注意,如果要在本地机器存储位置创建证书,则需要在盒子上具有管理员权限,并且需要更改 -sr 参数。

我希望这有帮助。

于 2015-12-04T23:20:03.773 回答
1

不,您不能延长其有效期。证书基本上是不可变的。否则,检查有效性、维护吊销列表等会更加昂贵(实际上可能无法做到)......您可以轻松创建一个新证书来替换现有证书并设置新证书的到期时间证明对您有用的任何东西。例如

CREATE CERTIFICATE [FSAECMKCert] WITH SUBJECT = 'FS AE CMK Cert',
START_DATE = '12/02/2015', EXPIRY_DATE = '12/31/2037'

请注意,AE 实际上并不尊重证书到期。否则,很多用户最终将失去对自己数据的访问权限——大多数组织在续订/轮换方面做得不好。但是,拥有“合理的”到期政策和轮换/续订流程以维持所需/预期的安全级别是一种很好的一般做法。

于 2015-12-02T18:14:15.397 回答
1

实际上,支持 Always Encrypted 的客户端驱动程序不会检查用作列主密钥的证书的到期日期(并且它们不会验证证书链)。即使证书已过期,驱动程序也能够加密/解密数据。

于 2016-12-16T01:57:37.897 回答