如何修复 SQL Server 的 Microsoft ODBC 驱动程序 17:SSL 提供程序 ssl_choose_client_version:不支持的协议

如何修复 SQL Server 的 Microsoft ODBC 驱动程序 17:SSL 提供程序 ssl_choose_client_version:不支持的协议

我已经在 Ubuntu 20.04 最低版本上安装了 Sql Server 2019 开发人员版和 mssql-tools。我可以毫无问题地连接到我的本地主机,但是当我想远程连接到另一个 sql 服务器时:

sqlcmd -S <server> -U <username> -P <password>

我遇到这个错误:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol].
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Client unable to establish connection.

我在 Debian 10 中遇到过一次这个问题,也在网上搜索解决方案,所以之后我手动更改了openssl.conf(需要 su 权限):

nano /etc/ssl/openssl.cnf

并将其添加到我的文件中:

  • ess_cert_id_alg = sha1[tsa_config1]在标题下

  • openssl_conf = default_conf靠近顶部

  • 最后的内容如下:

    [默认配置]

    ssl_conf=ssl_sect

    [ssl_sect]

    系统默认=系统默认_sect

    [系统默认部分]

    最小协议 = TLSv1.0

    密码字符串 = DEFAULT@SECLEVEL=1

我知道MinProtocolCipherString通常设置为TLSv1.2DEFAULT@SECLEVEL=2,但正如我曾经在 Debian 10 中提到的那样,我编辑了 openssl.conf 并将更改TLSv1.2TLSv1.0DEFAULT@SECLEVEL=2DEFAULT@SECLEVEL=1,并且我的连接已修复,但在 Ubuntu 20.04 minimal 中不仅没有这些行,而且当我再次手动插入这些时,我遇到同样的错误:

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol].
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Client unable to establish connection.

我的建议版本是:

OpenSSL 1.1.1f  31 Mar 2020

我也将我的 openssl 降级到 1.0 一次但它也不起作用!

我找不到其他任何东西,所以我来这里寻求帮助,感谢您的帮助。

答案1

原因可能是您当前的 openssl 不支持/关闭了某些密码(您之前的安装支持)而服务器需要它们。只需比较输出:

nmap --script ssl-enum-ciphers localhost
nmap --script ssl-enum-ciphers <DB SERVER IP>

解决方案:尝试手动安装新版本的 openssl (>1.1.1f)。我从 1.1.1f 升级到 1.1.1p,它解决了我的问题,无需额外配置。我还读过类似的案例,18.04 -> 20.04 和 1.1.1f 影响了其他人。

手动安装如下:

wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz -O openssl-1.1.1p.tar.gz
tar -zxvf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p
./config
make
sudo make install
sudo ldconfig
openssl version

注意:您也可以跳过上面的第一行,直接前往以下网址手动下载源 tar.gz:他们的下载页面

希望这会有所帮助

请注意,如果下载并解压后目录类似于,openssl-3.0.0则改为转到该目录,运行上述步骤,但如果 openssl 版本失败并出现错误

error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory

您需要复制更多文件:

sudo cp /usr/local/lib64/libcrypto.so.3 /usr/lib
sudo cp /usr/local/lib64/libssl.so.3 /usr/lib
sudo cp /usr/local/lib64/libssl.so /usr/lib

最后,更新动态链接器的链接和缓存:

sudo ldconfig

相关内容