You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux平台OpenSSL 3环境下无法连接使用SHA1+RSA签名证书的遗留SQL Server(TLS 1.2)

Linux平台OpenSSL 3环境下无法连接使用SHA1+RSA签名证书的遗留SQL Server(TLS 1.2)

我最近碰到一个棘手的连接问题:要对接一台遗留的SQL Server,但每次尝试连接都会因为TLS握手失败而失败。用Wireshark抓包分析后,终于定位到了根源——这台SQL Server的证书使用的签名算法是1.2.840.113549.1.1.5(也就是sha1WithRSAEncryption)。

进一步测试发现,只有当客户端在TLS Client Hello的signature_algorithms扩展里明确声明支持rsa_pkcs1_sha1 (0x0201)时,服务器才会正常响应握手请求(我在Windows平台上测试是可以成功连接的);如果客户端没声明这个算法支持,服务器会直接断开连接。但我在Linux的OpenSSL 3环境下,试了好几种方法都没法让客户端带上这个签名算法的支持,导致一直连不上。

注:使用的TLS版本是1.2

我已经尝试过的方法

  • 把OpenSSL配置里的SECLEVEL设为0:CipherString = ALL@SECLEVEL=0
  • 添加了之前Windows上成功连接时使用的加密套件,比如TLS_RSA_WITH_AES_128_CBC_SHA256 (0x003c)
  • 确认legacy provider已经加载并激活(用openssl list -providers命令验证过)
  • 尝试在配置里显式添加想要的签名算法,比如设置SignatureAlgorithms = RSA+SHA1,但不确定配置是否正确

解决方法

在OpenSSL 3中,要启用rsa_pkcs1_sha1这类遗留签名算法,光设置SECLEVEL=0可能不够,需要确保legacy provider被正确启用,并且在配置里明确指定签名算法列表,把RSA+SHA1加进去。

具体可以这么修改openssl.cnf配置文件:

  1. 首先在[provider_sect]部分确保legacy provider被启用:
[provider_sect]
default = default_sect
legacy = legacy_sect

[default_sect]
activate = 1

[legacy_sect]
activate = 1
  1. 然后在[ssl_default_sect](或者对应的SSL配置段)里,明确设置签名算法和加密套件:
[ssl_default_sect]
MinProtocol = TLSv1.2
CipherString = ALL@SECLEVEL=0
SignatureAlgorithms = rsa_pkcs1_sha1,rsa_pkcs1_sha256,rsa_pkcs1_sha384,rsa_pkcs1_sha512

这里把rsa_pkcs1_sha1放在签名算法列表的前面,确保客户端优先声明这个算法支持。

  1. 如果你的应用是通过环境变量指定配置文件的,可以设置OPENSSL_CONF=/path/to/your/openssl.cnf,然后重启应用再尝试连接。

另外,也可以通过命令行临时测试,比如用openssl s_client命令来验证是否能正常握手:

openssl s_client -connect your-sql-server-host:1433 -tls1_2 -sigalgs rsa_pkcs1_sha1 -cipher ALL@SECLEVEL=0 -provider legacy -provider default

如果这个命令能成功建立连接,说明配置是正确的,再把对应的配置应用到你的应用程序里即可。

备注:内容来源于stack exchange,提问作者shameleo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:59:37