sql-server - 如何配置加密的 SQL Server 连接以防止 MITM 攻击?

标签 sql-server security encryption sql-server-2016

令我惊讶的是,在配置 SQL Server 强制连接加密时,默认情况下 SQL Server 不会采取任何措施来防止中间人攻击。

对连接进行强制加密非常简单。您转到 Sql Server 配置管理器,展开 SQL Server 网络配置、[您的实例] 的协议(protocol),右键单击 TCP/IP,将强制加密更改为"is",重新启动 SQL Server,然后就完成了。 Force Encryption set to Yes

根据 Microsoft TechNet ( https://technet.microsoft.com/en-us/library/ms189067(v=sql.105).aspx ),这将生成一个自签名证书。很好,没问题,但我希望我的客户会提示该证书不受信任。但是,他们没有。他们很高兴地连接到它。然后我意识到 SQL Management Studio 中默认情况下会选中“信任服务器证书”。很好,但最令人震惊的认识是:即使取消选中“信任服务器证书”,SSMS 也不会提示、警告或拒绝连接。

Trust server certificate is unchecked

因此,默认情况下,SQL Server 完全容易受到 MITM 攻击,因为客户端不执行任何操作来验证来自 SQL Server 的证书。证书不必由 CA 签名:证书应该配置为客户端上的受信任证书。如果这不是真的,“信任服务器证书”复选框有什么用?

最佳答案

参见Using Encryption Without Validation 。除了连接设置“信任服务器证书”之外,还有另一个设置,即客户端设置“信任服务器证书”,它是从配置管理器配置的。如果设置了两者中的任何一个,自签名证书都会成功(实际上有点复杂,因为客户端设置No将覆盖连接设置...请参阅链接)。

关于sql-server - 如何配置加密的 SQL Server 连接以防止 MITM 攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39108597/

相关文章:

c - 加密解密错误(一次性一密加密)

windows - 为Windows实现个人防火墙,如何判断数据包属于哪个应用程序?

encryption - 我们可以读取和编程AMD处理器的微码吗?

browser - 如何将密码从浏览器安全地传输到Web服务器?

ruby - ruby 中的错误解密错误

sql - 在 SQL 查询中使用 'LIKE' 和 'REGEXP'

c# - DbContext 和连接池

c# - 当我的返回值不为空时,为什么 ExecuteScalar() 返回空值?

SQL 公式返回不一致的精度

java - BufferedReader 的安全实现