Centos7下的DOCKER连接较低版本的MSSQL报错处理

A connection was successfully established with the server, but then an error occurred during the pre-login handshake. (provider: TCP Provider, error: 35 - An internal exception was caught)

出现问题的 asp.net core 程序是跑在容器中的,容器镜像用的是 mcr.microsoft.com/dotnet/core/aspnet:3.0

运行容器内的 openssl 命令发现 openssl 的版本比较高

1.进入容器

docker exec -it [容器ID] bash
openssl version

OpenSSL 1.1.1d  10 Sep 2019

查看 openssl.cnf 配置文件

cat /etc/ssl/openssl.cnf

[system_default_sect] MinProtocol = TLSv1.1 CipherString = DEFAULT@SECLEVEL=2

 发现允许的 ssl 最低版本是 TLSv1.2 ,而程序所使用的 SQL Server 数据库版本比较低不支持 TLSv1.2 ,修改为 TLSv1.0 后问题解决

4.修改方法:在 Dockerfile 中添加下面的指令

RUN sed -i 's/TLSv1.2/TLSv1.0/g' /etc/ssl/openssl.cnf

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