令我惊讶的是,在配置 SQL Server 以强制连接加密时,默认情况下 SQL Server 不会阻止中间人攻击。
强制对您的连接进行加密非常简单。您转到 Sql Server 配置管理器,展开 SQL Server 网络配置,[您的实例] 的协议,右键单击 TCP/IP,将强制加密更改为“是”,重新启动 SQL Server,您就完成了。
根据 Microsoft TechNet ( https://technet.microsoft.com/en-us/library/ms189067(v=sql.105).aspx ),这将生成一个自签名证书。很好,没问题,但我希望我的客户抱怨证书不受信任。 但是,他们没有。他们很高兴地连接到它。然后我意识到默认情况下在 SQL Management Studio 中检查了“信任服务器证书” 。很好,但最令人震惊的实现是:即使您取消选中“信任服务器证书”,SSMS 也不会抱怨、警告或拒绝连接。
因此,默认情况下,SQL Server 完全容易受到 MITM 攻击,因为客户端不执行任何操作来验证来自 SQL Server 的证书。证书不必由 CA 签名:证书必须在客户端上配置为受信任的证书。如果不是这样,那么“信任服务器证书”复选框的用途是什么?
当我看到这个问题时,我打开 SSMS 的目的是阅读“信任服务器证书”选项的帮助文档,结果发现这是一个未记录的功能,没有描述它在 MSDN 上的作用。我的猜测是,它可用于信任过期证书或无法通过信任链验证的证书。由于自签名证书没有信任链,因此 SSMS 在使用公钥验证签名时会信任它。
我认为您的建议将为 SQL Server 的高安全性实现提供出色的服务器配置选项。似乎您想要一个配置选项来拒绝所有自签名证书,因为避免这些是减轻中间人攻击的唯一真正方法。正是您提出的问题导致我建议使用域或公共 CA 证书配置“证书”选项卡。