填坑 | .NET 5在Docker中访问MSSQL报错

【.NET Core作者 / Edison Zhou


不知道你有没有在.NET Core/.NET 5的Docker访问MS SQL Server数据库,如果有,那么很有可能会遇到这个错误。

1SSL版本错误

最近在公司用.NET 5重构部分业务服务,由于之前老系统使用了MS SQL Server数据库,因此本次重构也决定继续使用。但是,在将.NET 5应用部署到Docker中通过Swagger测试时,却报了以下一个错误:

Microsoft.Data.SqlClient.SqlException (0x80131904): 
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)---> System.Security.Authentication.AuthenticationException: Authentication failed, see inner exception.---> Interop+OpenSsl+SslException: SSL Handshake failed with OpenSSL error - SSL_ERROR_SSL.

从字面意思来看,看不出来是啥,只能定位这一句 SSL_ERROR_SSL。搜索一番,发现在.NET Core/.NET 5的容器镜像中的OpenSSL的最低协议版本要求为TLSv1.2,而我们的MS SQL Server所用的版本较低,不支持TLSv1.2只支持TLSv1

我们可以进入容器内部去验证下:

# docker exec -it <docker-name> /bin/bash
# cat /etc/ssl/openssl.cnf.......
[system_default_sect] 
MinProtocol = TLSv1.2 
CipherString = DEFAULT@SECLEVEL=2

因此,明确了问题,直接在容器内部更改一下:将TLSv1.2改为TLSv1即可

# docker exec -it <docker-name> /bin/bash
# vi /etc/ssl/openssl.cnf.......
[system_default_sect] 
MinProtocol = TLSv1 
CipherString = DEFAULT@SECLEVEL=2

更改完成后,再次访问接口,就不会报错了。

2修改Dockerfile

上面的方法只是一个临时方案,重新打镜像运行又会恢复为TLSv1.2。因此,我们需要更改Dockerfile,让其在源镜像中就更改为TLSv1。

这里以一个简单的Dockerfile为例,只需要在微软.NET 5镜像源的层中增加一行指令即可:

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

完整Dockerfile示例:

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
RUN sed -i 's/TLSv1.2/TLSv1/g' /etc/ssl/openssl.cnf
EXPOSE 80FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["AuthCenter.API/AuthCenter.API.csproj", "AuthCenter.API/"]
RUN dotnet restore "AuthCenter.API/AuthCenter.API.csproj"
COPY . .
WORKDIR "/src/AuthCenter.API"
RUN dotnet build "AuthCenter.API.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "AuthCenter.API.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "AuthCenter.API.dll"]

其他相关联的OpenSSL错误:

Microsfot.Data.SqlClient.SqlException(0x80131904):
A connection was successfully established with the server, 
but then an error occurred during the pre-login handshake.
(provide:SSL Provider,error:31 - Encryption(ssl/tls) handshake failed)

这个错误和上面的error: 35类似,也是TLS协议版本较高,而SQL Server不支持。修改方法也是改为TLSv1,这里需要注意的是,我发现网上很多文章都是建议改为TLSv1.0,也就是下面的指令:

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

对于网上大多数童鞋,上面的语句是适用的,但是也有一些和我一样的,即使使用了上面的语句还不行。一番搜索发现,需要改为TLSv1(即去掉小数点)才能工作。

3关于TLS协议

TLS是在TCP传输层之上,应用层之下实现的网络安全方案。在TCP/IP四层网络模型中属于应用层协议。TLS协议在两个通信应用程序之间提供数据保密性和数据完整性,另外还提供了连接身份可靠性方案。

UDP则使用DTLS协议实现安全传输,和TLS协议类似。

TLS协议的设计目的如下:

(1)加密安全:TLS应用于双方之间建立安全连接,通过加密,签名,数据摘要保障信息安全。

(2)互操作性:程序员在不清楚TLS协议的情况下,只要对端代码符合RFC标准的情况下都可以实现互操作。

(3)可扩展性:在必要时可以通过扩展机制添加新的公钥和机密方法,避免创建新协议。

(4)相对效率:加密需要占用大量CPU,尤其是公钥操作。TLS协议握手完成后,通过对称密钥加密数据。TLS还集成了会话缓存方案,减少需要从头建立连接的情况。

TLS协议所处的位置如下所示:

更多关于TLS协议的介绍:

https://www.cnblogs.com/Jack-Blog/p/13170728.html

End总结

在要求安全性越来越高的前提下,TLSv1.2被广泛应用,为了适配MS SQL Server的低版本,可以选择在Dockefile中降低TLS协议最低版本要求来解决问题。不过,这毕竟是一个不安全的方法,如果有条件,还是建议升级MS SQL Server所在服务器的TLS配置,使其支持TLSv1.2。

年终总结:Edison的2020年终总结

数字化转型:Edison的数字化转型之旅总结

C#刷题:C#刷剑指Offer算法题系列文章目录

.NET面试:.NET开发面试知识体系八股文

.NET大会:2020年中国.NET开发者大会PDF资料


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298711.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六个机械原理,动图形象直观、解读通俗易懂

全世界只有3.14 % 的人关注了爆炸吧知识01间歇运动机构▼间歇运动机构能够将原动件的连续转动转变为从动件周期性运动和停歇的机构&#xff0c;称为间歇运动机构。例如牛头刨床工作台的横向进给运动&#xff0c;电影放映机的送片运动等都用有间歇运动机构。常见的间歇运动机构有…

linux读写usb host,LINUX下USB1.1设备学习小记(3)_host与device

各位还记得”任何传输都是由host发起的”这句话么~在usb设备插入pc中到拔出usb设备,都是由host进行询问的一个usb鼠标的工作流程可以表达如下:usb鼠标插入pc中:主机询问设备:给我你的设备信息(控制传输)主机根据usb鼠标的设备信息进行驱动配置,配置结束后主机询问设备:给我你的…

java判断时间区间 隔天_Java初中级程序员面试题宝典

Java基础部分&与&&区别&#xff1f;&和&&都是逻辑运算符&#xff0c;都是判断两边同时真则为真&#xff0c;否则为假&#xff1b;但是&&当第一个条件不成之后&#xff0c;后面的条件都不执行了&#xff0c;而&则还是继续执行&#xff0c;直…

什么是sns

SNS 目录[隐藏] 第一章 什么是SNS&#xff1f; 第二章 SNS带给顾客的特殊价值描绘 第三章 观察SNS的技术与服务 第四章 SNS市场与竞争 第五章 SNS的主要营销策略简介 第六章 中国SNS的发展与主要网站及产品SNSSNS&#xff0c;全称Social Networking Services&#xff0c;即社会…

elsa-core——1.Hello World:Console

github上有一个开源的工作流项目elsa&#xff0c;elsa-core是core语言的版本&#xff0c;其文档因为是英文&#xff0c;因此会让很多人不想看&#xff0c;或者是看不下去&#xff0c;从这篇文章开始我将开始对elsa-core的文档翻译成中文并分享出来&#xff0c;方便大家查看与学…

docker 查看容器_Docker介绍

docker介绍什么是docker&#xff1f;我们先看一下官方文档对docker的定义。翻译一下就是&#xff1a;Docker是一个集开发&#xff0c;发布和运行应用程序的开放平台。Docker能够分离应用和基础架构&#xff0c;从而可以使得用户可以快速交付软件。借助于Docker&#xff0c;用户…

ASF经验谈(上)

http://software.intel.com/zh-cn/blogs/2009/12/01/asf/?cidsw:51cto【前言】写这篇文章之前先声明一下&#xff0c;笔者这里说到的ASF不是指Microsoft的多媒体文件的ASF格式&#xff08;可能这个很多人更熟悉一些&#xff09;&#xff0c;而是用于远程管理的ASF(Alert Stand…

ubuntu linux 批量部署,使用Cobbler批量部署Linux和Windows:CentOS/Ubuntu批量安装(二)...

通过前面服务端的部署&#xff0c;已经配置好了 Cobbler Server 端&#xff0c;接下来开始进行 CentOS/Ubuntu 的批量安装&#xff0c;在进行 CentOS/Ubuntu 批量安装时&#xff0c;也需要通过Cobbler来做相应的发行版导入配置。流程如下&#xff1a;上传ISO镜像到 Cobbler Ser…

盘点这些年被黑的最惨的语言

全世界只有3.14 % 的人关注了爆炸吧知识这些年&#xff0c;被黑过的语言数不胜数&#xff0c;最惨的要数HTML&#xff0c;但CSS、Python等也惨遭黑手比惨&#xff1f;这就来一波。HTMLHTMLC语言C语言JavaJavaJavaJavaJavaScript JavaScript JavaScriptJavaPHPPHPPHPPHPPythonPy…

2011目标 及 总结

20110918 添加 Glodon 任务规划 20110612 修改 经过年中分析&#xff0c;把下半年目标定为&#xff1a; 重心转向技术开发&#xff0c;有闲暇的时间就继续完成年初计划中的其它项。在技术学习方面&#xff0c;注意&#xff1a;不要花太多时间在开发“小系统”上&#xff0c;也不…

python 批量下载网页图片_Python实现多线程批量下载图片

《派森》(Python)3.13 win32 英文安装版 类型&#xff1a;编程工具大小&#xff1a;21M语言&#xff1a;英文 评分&#xff1a;8.7 标签&#xff1a; 立即下载 爬取图片可真的是一个可遇不可求的机会。 有需求就会动力。 目标&#xff1a;爬取某个网站上n多页的链接&#xff0c…

linux中获取redis的map,深入Redis之 bitmap位图和HyperLogLog(五)

bitmap位图我们知道一个字符占1个字节&#xff0c;也就是8个位例如set name bigbig字符串中的3个字符的ASCII码为98 105 113所以big转为二进制就是&#xff1a;01100010|01101001|01100111b i g占了3个字节的大小&#xff0c;一共24个位。bitmap位图可以帮我们获取…

想象中的同居生活 VS 真实的同居生活

1 长颈鹿是怎么喝水的2 为了防止雨伞被偷设计师还是真动了不少脑筋呢-3 睡在这样的床上&#xff0c;晒着太阳&#xff0c;肯定超赞4 如何阻止猫咪上楼5 想象中的同居生活 VS 真实的同居生活 6 硬生生把苹果削成吃不饱也吃不起的样子7 来来来准备瓜子杏仁你点的每个赞&#xff…

抽丝剥茧!Source Generators原理讲解

前言前段时间&#xff0c;我们已经用Source Generators实现了好多功能&#xff0c;比如AutoMapper、API最佳实践。你看完那些实现代码&#xff0c;是不是还有点云里雾里&#xff01;Source Generators到底是怎么做到的&#xff1f;基础知识Source Generators是编译过程的一部分…

GPON技术概述

GPON技术转载自《电子发烧友》。文章链接请见&#xff1a;http://www.elecfans.com/article/88/171/2009/2009050556028.htmlGPON技术详述介绍GPON 技术之前&#xff0c;先介绍目前也被应用的另一种PON 技术“EPON”。1&#xff0e;EPON技术介绍EPON 又名 GEPON&#xff0c;是由…

linux中断处理汇编入口,Linux中断处理体系结构分析(一)

中断也是一种异常&#xff0c;之所以把它单独的列出来&#xff0c;是因为中断的处理与具体的开发板密切相关&#xff0c;除一些必须、共用的中断(比如系统时钟中断、片内外设UART中断)外&#xff0c;必须由驱动开发者提供处理函数。内核提炼出中断处理的共性&#xff0c;搭建一…

没有违反GPL,他们真的给了源码

文 | Travis出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013&#xff09;【前情回顾】国内智能设备制造商 UMIDIGI 因违反 GPLv2 协议引发争议&#xff0c;并告知开发者“想要源码上门自取”。而后&#xff0c;知名科技博主 Naomi Wu&#xff08;机械妖姬&#xff09…

有朋友问我为什么这么帅

1 2 重庆的朋友告诉我这是微辣3 我就说我只是虚胖&#xff0c;这下你相信了吧&#xff1f;4 这明明就是打情骂俏好嘛5 这还是那个平常瓶盖都拧不开的女孩子吗6 被一个机器人撩到了&#xff01;7 这是什么原理&#xff1f;你点的每个赞&#xff0c;我都认真当成了喜欢

python安装详细步骤mac_Mac安装python3的方法步骤

Python有两个版本&#xff0c;一个是2.x版&#xff0c;一个是3.x版&#xff0c;这两个版本是不兼容的。 现在 Mac 上默认安装的 python 版本为 2.7 版本&#xff0c;若 安装 新版本需要 通过 该地址进行下载&#xff1a; https://www.python.org/ftp/python/3.5.0/python-3.5.0…

在Excel中实现下拉列表选择录入

我们在用Excel录入表格数据时&#xff0c;常常会遇到某列数据的值只在几个固定值中选择一个的情况&#xff0c;比如&#xff1a;人的性别列只可能录入男或女&#xff0c;对学历列只可能录入高中、大专、本科、研究生之一等。遇到这类数据&#xff0c;如果我们手工录入&#xff…