Docker是如何神奇的解决了我的SSL版本问题?

体娱   2024-08-03 09:31   山东  
最近,在忙一个小项目,把公司的出差业务对接到携程!
以前出差,员工就需要从公司借钱来支付车票、住宿费。如果懒得借款,就需要自己先垫付,回公司以后再报销。
这个做法的缺点,就是过程不友好。要么走繁琐的公司审批流程,要么自己先付费。无论哪一种,都让人很不舒服。
对接到携程之后,就不牵涉到钱的问题。员工可以直接从携程商旅上面订票,订机票,订酒店和火车票。到了月末,携程就会统一和公司结算,非常方便。
那我们公司跟携程对接有什么问题呢?
问题在于一个单据-出差申请单。这个单据申请单,就是一个证明,表明公司认可出差的必要性,就是为了管控,毕竟不能随随便便就出差,来一场说走就走的旅行!
携程对于这种情况,提供了一个专门的名词-”提前审批“。
我需要做的,就是给携程提供一个申请单号,并把它推送到携程上面去。有了这个号码,用户才能订票,从而达到一个”审批“的效果。
我的解决方案,就是写一个Java程序,运行在Linux上面,用cron定时30分钟运行一次,把已经审批通过的”出差申请单“推送到携程。
我们的数据库系统是SqlServer 2008R。
在Windows上面,我用Jetbrain的IDEA的时候,是可以运行的。
当我把程序打包,放到目标Linux-一台Ubuntu 22.04上面的时候,出现了一个问题。它却出现了一个错误,提示”SSL错误,无法连接到数据库“。
这个错误的原因是SqlServer2008使用的TLS版本是1.1,而Ubuntu22.03则早就不支持1.1版本了。我们知道,通讯的两端必须语言一致才行,否则鸡同鸭讲,必然失败。
没办法,我就开始搜索解决方法。
很快,一个解决方法进入了我的眼帘,那就是修改Ubuntu的OpenSSL配置文件,让它支持TLS1.1。
没办法,只好照做。
在修改完成之后,重启一下,然后发现问题依旧,依然提示错误!
既然Ubuntu的22.04版本不行,版本太高,那用一个以前版本的Ubuntu是不是就行了?
公司还有几台老旧的Ubuntu,有14.04、16.04、18.04。
那就从最新的18.04开始!
实验了一下,很幸运,没问题。
也就是说,Ubuntu 18.04没有TLS问题,可以从这台链接数据库。
但是,我依然希望使用原来那台22.04,因为它负载最低,而且版本比较新。
那怎么办呢?
它本身TLS不行,修改配置也不行!
但是18.04能行!
这个时候,一个想法突然涌上了心头,如何把Ubuntu 18.04的环境装进22.04呢?
你可能会说,这不是扯淡吗?这就像怎样把一个独立的人装进另外一个独立的人,怎么能做得到?
其实是可以的,因为Ubuntu不是人,而是Linux!
最重要的一点,就是那个神奇的技术-Docker。

只有在Ubuntu 22.04里面安装一个Docker容器,然后在Docker里面运行一个18.04的Docker Image就可以了。
说干就干。
首先从构建”Dockerfile“文件开始,Docker会根据这个文件来构建一个Image。
实践出真知,在经过1小时的调试之后,Docker Image顺利地运行起来。
那我们怎么看执行结果呢?
一个方案,是把结果记录到数据库里面,我们查数据库就可以了。
但是,我们并没有这样的打算,因为还需要改下程序,麻烦!
我们采用的解决方案,是用python27的”一句话httpserver“,来建立了一个基于日志目录logs的Web服务器,并把端口映射出来,这样就可以方便地从浏览器查看执行结果了。
至此,就比较完美地解决了SqlServer 2008的TLS版本过低的问题,完美绕过了Ubuntu和Sqlserver的ssl不匹配问题!
我是明月,
Docker很神奇,值得你拥有!

明月三千
将进酒,杯莫停。与君歌一曲,请君为我倾耳听。荔枝成为linux大师!
 最新文章