【发布时间】:2021-10-05 18:45:36
【问题描述】:
我正在编写一个与 SQL Server 连接的 VB6 应用程序。为了保护与数据库的连接,我使用 MSOLEDBSQL 作为支持 TLS 1.2 的提供程序。我还在我的机器上启用了 TLS 1.2。我使用 sys.validation 验证了连接状态。 dm_exec_connections 和 SQL server 显示所有的连接都是加密的。为了双重确认,我尝试使用 echomirage 检查流量,结果令人惊讶。数据未加密,我可以读取所有数据流,如下图所示。我的问题是
- 此通信确实是加密的。如果不是,为什么我在 SQL Server 中看到不同的状态
- 我在某处读到 TCP 是二进制协议。如果是这样,为什么即使此通信未加密,我也会看到纯文本?
【问题讨论】:
-
你的连接字符串是什么样的?是否包含
TrustServerCertificate=true;Encrypt=true;? -
您确定 EchoMirage 没有显示非 HTTPS 版本的流量吗?这些网络协议应用可以通过充当代理或使用用于加密的本地证书密钥来解密安全流量。
-
您确定您正在查看正确的捕获吗? SQL Server 的协议不使用 XML。也许您试图发布一个 XML 字符串,或者数据库返回一个 XML 结果,但协议 TDS 不是基于 XML 的。
I read somewhere that TCP is binary protocol.这不是read somewhere。所有网络协议都是二进制的。所有传输字节。其中一些代表文本,一些不代表。 -
如果你真的想检查任何东西,请使用 SSMS,而不是旧石器时代的 VB6。与 SQL Server 的实际问题相比,您在代码或使用 ADO 的方式中看到问题的可能性要大得多。 PS:截图其实给你看的是内容是二进制的,右边是翻译成文本的
-
@Jay 要防止 SQL Server 的 MITM 攻击,您应该不使用
TrustServerCertificate=true;。这将禁用验证。如果您想使用自签名证书进行测试,您必须将其添加到机器的受信任证书中,not 禁用验证。 Using Encryption Without Validation in SQL Server Native Client 解释。当你不使用验证时会发生什么,并带有一个大的红色警告
标签: c# sql-server ssl encryption tls1.2