前一段时间有空时,学着写了一个小程序,想布署上去,发现对后台的接口服务都需要https,而且必须是TLS1.2,因为是内部应用,基本上没有用https,更别说TLS1.2,抱着试一试的心态,想把这个TLS1.2启用,逛了一圈后,改了下注册表,同时下载了一个IISCrypt的软件,不得不说,这是个好软件,只是一开始接触,没有搞明白,就直接在服务器上运行,然后点那个"Best Practices"按钮,下班前系统没有异常,就没把这事放在心上。
接下来接二连三的异常,让我下次再也不在Live服务器上做实验了.
当天晚上,OA团队来电,说OA连不上我们的数据库,(公司里用的OA是泛微),我自已的APP及其他的应用都能够连,所以没有往这上面想,以为是OA那边的问题,后来泛微那边的解决办法是升级jdk的版本,这事我当时还一直很纳闷,连数据库跟jdk版本还有关系?
几天之后,服务器不知道为何自动重启了,早上进公司后,发现另一台SQL Server与这台SQL Server之间建立的Link Server相互不通,用SSMS连接时提示
“已成功与服务器建立连接,但是在登录前的握手期间发生错误”
第一次见到这个错误,啥意思,连接成功,怎么握手期间还错误 ,在网上找了一下答案,然后咨询公司里的Infra Team,他们也没见过这异常,无能为力.
在排查期间发现了其他的现象,包括:
1、只是这两台服务器相互之间SQL Server不能互连,这两台服务器与其他的SQL Server都能正常连接。
2、这两台不光是SQL Sever不能互连,远程桌面也不能互联,每次远程桌面,Event Log里就会多两笔异常日志。提示
https远程客户端应用程序收到一个TLS 1.0连接请求,但没有任何受客户端应用程序支持的密码套件是受服务器支持的
3、不能连的那台SQL Server OS是Windows 2003
找了好几天,最后还是一个外文网站提示了我,我再次打开IISCrypo软件,切换到Cipher Suites 界面,发现下面很多选项都没勾上,因此基本上断定是因为之前的这个工具引起的,当时点了Best Practices,就把一些认为旧的或者是不安全的选项没有勾上,但是因为Windows Server 2003只支持旧的协议和密码套件。于是将Cipher Suites全部选上,重启,问题解决。
题外话,重启后发现SQL Server 不能启动,提示”sql server 服务因找不到指定的模块“,解决办法是将VIA协议禁止就可以了,只是很好奇为什么会突然不能启动。
附上一个英文链接,是这个链接让我慢慢接近问题真相。