ubuntu 22.04 sqlcmd 无法连接到 ms sql server 2016

ubuntu 22.04 sqlcmd 无法连接到 ms sql server 2016

我花了几天时间在谷歌上寻找解决方案,但没有找到正确的解决方案。所以我把它发布在这里。

我有 3 台 VM 机器。

VM 1:
Windows Server 2012 R2 SP1,192.168.1.10
SQL Server 2016,端口 1432
SQL Server 2017,端口 1433

虚拟机 2:
ubuntu 20.04
openssl 1.1.1p

虚拟机 3:
ubuntu 22.04
openssl 3.0.2

在 VM2(ubuntu 20.04)上:
连接到 sql server 2016
sqlcmd -S 192.168.1.10,1432 -U test -P 测试
成功连接
连接到 sql server 2017
sqlcmd -S 192.168.1.10,1433 -U test -P 测试
成功连接

在 VM3(ubuntu 22.04)上:
连接到 sql server 2017
sqlcmd -S 192.168.1.10,1433 -U test -P test
成功连接
连接到 sql server 2016
sqlcmd -S 192.168.1.10,1432 -U test -P test
获取错误:
Sqlcmd:错误:SQL Server 的 Microsoft ODBC 驱动程序 17:TCP 提供程序:错误代码 0x2746。Sqlcmd
:错误:SQL Server 的 Microsoft ODBC 驱动程序 17:客户端无法建立连接。

然后我检查 VM1 上的 sql server 2016 日志,发现 2 个错误:
事件 ID:36888
生成了致命警报并发送到远程端点。这可能会导致连接终止。TLS 协议定义的致命错误代码为 40。Windows SChannel 错误状态为 1205。
事件 ID:36874
从远程客户端应用程序收到了 TLS 1.2 连接请求,但客户端应用程序支持的任何密码套件均不受服务器支持。SSL 连接请求失败。

我尝试过的:
1、修改/etc/ssl/openssl.cnf
MinProtocol = TLSv1.0
CipherString = DEFAULT@SECLEVEL=1

2、降级openssl到1.1.1p

3、修改win服务器reg
HKLM SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2
键值:Enabled Value:1

4、执行windows更新

我尝试了所有能找到的关于“TCP 提供程序:错误代码 0x2746”的建议,但没有一个适合我的情况。

当我们在 ubuntu 22.04 和 openssl 3.0.2 中使用 sqlcmd 到 ms sql server 2016 时,就会出现此问题

有什么想法?有什么建议?有什么解决方案?

答案1

Ubuntu 22.04

制作 openssl.cnf 文件 例如) /usr/local/ssl/openssl.cnf

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect
ssl_conf = ssl_sect

[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = ALL:@SECLEVEL=0 

使用旧版 TLSv1 ubuntu 22.04 openssl3 运行 nagstamon

export OPENSSL_CONF=/usr/local/ssl/openssl.cnf

Ubuntu 20.04

制作 openssl.cnf 文件 例如) /usr/local/ssl/openssl.cnf

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = ssl_default_sect

[ssl_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1

Ubuntu 20.04 - 如何设置较低的 SSL 安全级别?

export OPENSSL_CONF=/usr/local/ssl/openssl.cnf

答案2

您还可以向 systemd 添加设置 OPENSSL_CONF 环境变量:

  • 创建目录/etc/systemd/system/php8.1-fpm.service.d

  • 创建一个disable_SSL_SECLEVEL=2.conf文件内容

    [服务]

    环境=“OPENSSL_CONF=/usr/local/ssl/openssl.cnf”

跑步

$ sudo systemctl 守护进程重新加载

$ sudo 重启 php8.1-fpm

相关内容