使用“encrypt=false”连接到 SQL Server 时的 TLS

Lar*_*ard 4 sql-server encryption

我正在尝试将 SQL Server 2017 Express Edition 配置为使用 TLS 1.2 加密,并接受来自简单测试 JDBC 程序的连接。我对 java 和 MSSQL 相当有经验,但对加密方​​面不太了解。我正在尽可能地遵循微软的文档。

我有一个非常简单的 JDBC 测试程序,而我的 SQL Server 仍然将“强制加密”设置为“否”。

当我使用简单的 URL 连接到服务器时:

jdbc:sqlserver://...\SQLEXPRESS:1433;databaseName=...;user=...;password=...

它因可怕的事情而失败:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

当我将“;encrypt=false”附加到 URL 时,它连接正常。

但是,当我对成功交易进行 Wireshark 网络跟踪(使用“encrypt=false”)时,我仍然在跟踪中看到看起来像 TLSv1.2 握手的内容。Wireshark 中这些记录的“信息”是:

  1. 《客户您好》
  2. “服务器问候、证书、服务器密钥交换、服务器问候完成”
  3. “客户端密钥交换、更改密码规范、加密握手消息”
  4. “更改密码规范,加密握手消息”
  5. “申请数据”

这些是什么?由于我已指定“encrypt=false”,因此我希望在跟踪中看不到 TLS。

谢谢。

Dan*_*man 5

Encrypt=false表示客户端不需要加密。如果可能,仍将使用 TLS,至少对登录凭据进行加密。以下是指定时的jdbc 文档的相关摘录。Encrypt=false

驱动程序不会强制服务器支持 TLS 加密。如果服务器具有自签名证书,则驱动程序将启动 TLS 证书交换。TLS 证书不会被验证,只有凭据(在登录数据包中)会被加密。

如果服务器要求客户端支持 TLS 加密,驱动程序将启动 TLS 证书交换。TLS 证书不会被验证,但整个通信将被加密。