我已经在 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
我知道MinProtocol
和CipherString
通常设置为TLSv1.2
和DEFAULT@SECLEVEL=2
,但正如我曾经在 Debian 10 中提到的那样,我编辑了 openssl.conf 并将更改TLSv1.2
为TLSv1.0
和DEFAULT@SECLEVEL=2
到DEFAULT@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