NET5 在docker容器中连接SQL SERVER出错的解决方法

# 背景说明

最近用NET5开发了一个小程序,连接SQL SERVER数据库,并查询一些数据,具体的功能不重要。开发时,测试用的自己的SQL SERVER2019测试,运行正常后,就进行打包发布了。然后丢给同事去部署,起初的部署也很顺利,但是后面开始出现了问题,数据库无法连接。

# 错误情况和排查过程

docker 镜像打包用的基础镜像是mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim,是微软官方的镜像,容器在运行时,刚开始的错误是 A connection was successfully established with the server, but then an error occurred during the pre-login handshake.(provider:TCP Provider,error:35),看错误提示,是协议协商过程中的握手出错了,于是先百度了一圈,得到大概的结果应该是TLS协议的版本问题,NET5中的SqlClient使用了TLSv1.2来连接数据库,而早期的SQL SERVER使用的是TLSv1.0协议,导致了连接出现错误。

根据大神的提示,将容器中 /etc/ssl/openssl.conf文件中的TLSv1.2改为TLSv1.0,SECLEVEL改为1,程序依然无法正常连接SQL SERVER数据库,但是提示的内容发生了变化,错误内容如下:A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: SSL Provider, error: 31 - Encryption


版权声明:本文为xiaoxinghappy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。