我们正在 2019 年环境中实施 SQL Server Always Encrypted。在过去的几个月里,我们已经完成了几次成功的 POC,但在将解决方案转移到 Prod 时,我希望使用公共可信 CA 来获取证书。但现在,回顾网络上大约 10 个 AE 教程,包括 Microsoft 官方说明,我发现从未提及过使用公共可信 CA。这里甚至有一篇文章询问使用受信任的 CA 证书是否会带来任何好处,并且建议不会。
我正在努力满足我们在全公司范围内推出的所有安全计划,所以我想我正在尝试找到某种我可以指出的标准答案。
我一直在谈论自签名证书如何受到中间人攻击,但我想我开始意识到这仅适用于正在建立的 SQL 连接以及流经该连接的任何数据(因为表中的数据未加密,SSL 对其进行加密)。但对于AE来说,数据库中的数据已经只是一个加密的字符串。
那么,如果始终加密解决方案的本质是在从未创建或存在于保存数据的同一服务器上的自签名证书的情况下完成,是否可以排除任何 MIM 攻击?简单地使用自签名证书是公认的“标准”方式吗?经过深思熟虑,我相信答案是肯定的,但只是想要某种“官方”答案,哈哈。
Always Encrypted (AE) 有两个主要部分:数据库引擎和客户端驱动程序。数据库引擎始终*使用加密数据,并且数据永远不会处于解密状态。因此,通过线路发送到客户端或服务器或从客户端或服务器发送的数据也处于加密状态。事实上,唯一不处于加密状态的地方是任何具有适当驱动程序并有权访问正确证书来解密数据的端点。
鉴于上述情况,除非 MiM 拥有证书的副本(以及 TLS 所需的任何其他证书),否则不应该有办法(不包括可笑的暴力破解)发生这种情况。然而,这确实将安全责任推给了那些在正确保护方面有着相当糟糕记录的端点。
回答你的问题,是的,考虑到通常不会出现 MiM 攻击的性质。此外,我没有在最常见的驱动程序中看到任何地方检查信任证书,也没有检查 CRL...当然,我很容易错过一些东西,因为我没有把研究代码作为我的论文。
几乎这就是为什么你看不到任何对它的真正参考。大多数地方都有 PKI 设置,那些没有设置的地方可以轻松使用内置工具来创建证书。
微软是唯一可以给你一个“官方”答案的地方(我猜从技术上来说,公司也是人,所以是唯一的人?)。
* This does not include secure enclaves
自签名证书不会比任何其他类型的证书更容易受到中间人攻击。它们唯一的特别之处在于它们不会自动受信任(因为它们没有由受信任的机构签名),因此配置信任是您的问题。
另请注意,证书颁发机构的主要好处是当连接客户端不受您控制时...例如,当一百万匿名用户访问您的网站时,您无法手动与所有这些用户一一建立信任。
这对于像数据库服务器这样的东西来说不太相关,数据库服务器通常由一小部分客户端访问,并且不会被匿名访问。在这种环境中,无论如何,每个客户端都需要设置为与服务器进行身份验证,因此确保它们信任服务器证书成为该过程的一部分。