. net 5 + Microsoft.Data.SqlClient -从传输流中收到一个意外的EOF或0字节



我更新了我的应用程序从。net Core 3.1到。net 5,现在我不能打开连接到我的SQL Server数据库。最里面的异常错误消息是

从传输流收到一个意外的EOF或0字节。

顶级错误消息是

与服务器成功建立连接,但在登录前握手时发生错误。(provider: SSL provider, error: 31 - Encryption(SSL/tls) handshake failed)

除了。net 5的版本,我只更新了基本图像,从3.1-bionic5.0.3-focal-amd64

还有什么我应该做的吗?

编辑1:
我发现这篇文章似乎与我正在阅读的内容密切相关。但是在将我的CipherString更改为建议的值后,我没有改变错误。同样的事情。也许有一个CipherString = ANY?

说明

microsoft建议通过升级SQL server以支持TLS v1.2来提高安全性

参:

  • SqlClient故障诊断指南
  • 如何启用TLS 1.2
  • KB3135244 - TLS 1.2支持Microsoft SQL Server

但是,如果您无法升级您的SQL Server以支持TLS v1.2,您可以通过编辑/etc/ssl/openssl.cnf文件来影响可用的密码套件以实现客户端协议的降级。

因为Alpine容器是简单的,所以首先安装您喜欢的编辑器,例如:

apt-get update
apt-get install nano

编辑/etc/ssl/openssl.cnf,将以下行放在文件的开头:

openssl_conf = default_conf

和文件末尾的以下行:

########## Override default settings to enable TLS v1.0 and 1.1 ##########
[ default_conf ]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
CipherString = DEFAULT:@SECLEVEL=1
#It really should be:
#CipherString = DEFAULT:@SECLEVEL=2

这将影响容器中所有启用openssl的进程。您可以使用以下命令在更改前后测试连接性:

# Test TLS v1.0 connectivity
openssl s_client -host google.com -port 443 -tls1
# Test TLS v1.1 connectivity
openssl s_client -host google.com -port 443 -tls1_1

相关内容

  • 没有找到相关文章

最新更新