SSL握手中win xp和SNI的那点事

一、背景需求
server1-3使用不同的域名对外提供https服务,用nginx作为前端负载均衡器并负责https集中解密工作(以用户访问的域名为依据进行流量分配,同样的也是以域名为依据来判断应该将哪张证书丢给用户。即:SNI(Server Name Identification)功能),用户为WIN XP和WIN 7(都使用IE8浏览器)。

 [root@localhost ~]$ nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
built with OpenSSL 1.0.2k-fips 26 Jan 2017
TLS SNI support enabled ===> 查看SNI状态

二、工作原理
1、用户(WIN XP、WIN 7)通过DNS解析获知"a.test.com"、"b.test.com"、"c.test.com"三个域名对应的IP都为"192.168.178.154"
2、用户(WIN XP、WIN 7)与"192.168.178.154"进行SSL握手,获取相应域名证书后再次向"192.168.178.154"发起真正的http(已加密)请求
3、"192.168.178.154"收到加密后的http请求后先进行解密,然后再根据相应的策略向后端服务器server1-3发起http请求(未加密)
4、后端服务器server1-3进行处理后将回应的包发送给nginx,nginx将该数据进行加密后再次封装然后发送给用户

三、出现的问题:
就在大家都觉得这个逻辑十分顺畅的时候问题来了,我们发现WIN XP用户使用IE浏览器不能正常访问,其他系统均可以正常访问

四、排障:
1、WIN XP访问同样域名的80端口是否正常? 结果:正常。 说明问题出在SSL握手上了
2、将WIN XP和WIN 7访问443端口的流量进行抓包分析(可以看到WIN7的SSL握手成功,而WINXP第一次使用TLSv1握手失败,然后自动换用SSLv3进行握手,但依然失败)

3、为什么WIN7发hello的时候的nginx就会回应hello,而WINXP发hello时nginx就会回Alert呢? 我们来展开WIN7和WINXP的hello包来仔细看下。(可以看到WIN7的hello包中携带了Extension:server_name字段,并且里面包含了要访问的域名信息。而反观WINXP则没有该字段)

4、那WINXP换用其他浏览器能不能解决这个问题呢?(换用搜狗浏览器试下,结果发现可以访问了。抓包发现搜狗浏览器在发送SSL的hello包时会携带Extension:server_name字段,并且还附带了一大堆其他参数)

五、总结:

WINXP在使用IE访问https网站时,对方服务器不能使用SNI方式进行分流,不然会因为不能建立SSL握手而访问失败

附:解决方案

1、WINXP换用其他浏览器(对于公网服务不现实)

2、服务端通过IP地址颁发证书(WINXP虽不携带访问的域名信息,但它总有三层包头吧!)(推荐)

3、服务端全站只用一张大通配证书,无论用户访问哪个域名都将该证书丢给它(不推荐)

SSL握手中win xp和SNI的那点事的更多相关文章

  1. vs2012编译在win7 32位电脑和win xp电脑上运行的win32程序遇到的问题记录

    一.win7 32位电脑: vs2012编译的64位程序是没有问题的.但编译的32位程序在别的电脑(虚拟机模拟)出错: 感觉很无语,vs这么牛逼的东西,在设计时候都不考虑这些吗? 在自己电脑C:\Wi ...

  2. win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5

    win xp 安装 VS2010 时要重启是因为没安装WINDOWS INSTALLER 4.5. 无意间看到VS2010安装列表中有一项是 WINDOWS INSTALLER 4.5 . 装这个玩意 ...

  3. WIN XP蓝屏代码大全

    转自:廊坊师范学院信息技术提高班---韩正阳 http://blog.csdn.net/jiudihanbing WIN XP蓝屏代码大全WIN XP蓝屏代码大全一.蓝屏含义 1.故障检查信息 *** ...

  4. TCP三次握手中SYN,ACK,seq ack的含义

    转至:https://www.cnblogs.com/muyi23333/articles/13841268.html 1.TCP 为什么三次握手而不是两次握手 1.防止已失效的连接请求又传送到服务器 ...

  5. 解决win 7&win xp等系统无法正常用U盘安装或启动

    目前,制作启动U盘通常是用ultraiso,但由于各种硬件设备与系统的更新,导致现在装系统会出现各种错误. 在用ultraiso制作的启动U盘,装XP时,可能找不到引导项:装win7时,可能提示”wi ...

  6. Win XP 如何禁用系统的自动更新

    想关闭系统的自动更新. 打开[控制面板]/[安全中心],发现“自动更新”和“更改安全中心通知我的方式”,都已成了灰色,无法更改. 网上查了一下,找到了这样一个处理方法:将[服务]中一个名为“Autom ...

  7. 批处理 —— 每天生成一个以日期命名的文件(Win XP)

    想达到这样一个效果:每天在某个目录下生成一个以日期命名的文件(如,0705.txt). 第一步,新建一个批处理文件 新建一个文件,比如[create_day_file.bat].编辑,输入以下内容 : ...

  8. Win XP 如何禁用屏保

    如果你试过 “在桌面空白处点击右键-[属性]-[屏幕保护程序],选择[无],点击[确定]”后,当时是可以去掉屏保.但如果重启计算机或者从待机状态唤醒后,屏保依然会出现,那么你可以试试下面的方法. 首先 ...

  9. VS2013下的Nmake编译链接成win XP的可执行程序

    nmake下没有指定toolset=vc120_xp等类似物.但是,可以指定Link.exe的链接参数,指定子系统就可以了,/SUBSYSTEM:[WINDOWS | CONSOLE],5.01 5. ...

随机推荐

  1. STM32F407外部晶体改为25M后检测不到芯片的解决办法

    问题描述 分享一个之前遇到的STM32F4晶体频率问题,导致单片机死机的解决办法.使用一款新的F4开发板,直接使用的正点原子STM32F407工程模板代码,管脚配置正确,下载到外部晶体为25MHz的开 ...

  2. input输入框change和blur事件区别

    blur与change事件在绝大部分的情况下表现都非常相似,输入结束后,离开输入框,会先后触发change与blur,唯有两点例外. 1.没有进行任何输入时,不会触发change 在这种情况下失焦后, ...

  3. C#/.Net开发入门篇(2)——第一个控制台应用程序

    相信看了上一篇文章的小伙伴已经安装好自己的开发工具了VS了,这一篇文章就教大家怎么创建第一个应用程序. 下面大家跟着我的操作一起来创建自己的第一个应用程序吧 一.打开VS工具点击左上角的文件→新建→项 ...

  4. JS高级教程

    JS高级教程 JS高级教程

  5. SQL Server如何通过Page_ID找到对应的表

    其实本篇文章算是翻译Finding a table name from a page ID这篇文章,只是不想直接翻译.用自己的理解叙说出来.算是对上一篇博客"SQL Server如何找出一个 ...

  6. Appium(四):真实机第一个appium程序、模拟器第一个appium程序、查看元素

    1. 真实机第一个appium程序 学完了前面的知识,也将环境搭建好了,接下来我们就正式开始appium的学习了. 在做app自动化的时候,我们肯定是针对某个产品.某个软件进行测试,那么我们一定是先让 ...

  7. 2.华为路由交换技术_TCP/IP参考模型

    1.应用层 2.传输层(主机到主机层) 3.网络层(IPV4) ARP协议:地址解析协议 原理:源终端A想要发送信息给目的终端B,已知B的IP地址,需要获取B的MAC地址.首先它会在局域网广播,一般情 ...

  8. center----Iframe 用法的详细讲解

    把iframe解释成“浏览器中的浏览器“很是恰当 <iframe frameborder=0 width=170 height=100 marginheight=0 marginwidth=0 ...

  9. C语言程序设计100例之(15):除法算式

    例15   除法算式 问题描述 输入正整数n(2≤n≤68),按从小到大输出所有形如abcde/fghi=n的表达式.其中a~i为1~9的一个排列. 输入格式 每行为一个正整数n (n <= 1 ...

  10. python内置函数的使用(一)

    迭代器(iterator)和可迭代对象(iterable) 在python中,要实现要个对象可以进行遍历,也就是实现for循环,那么他必须是一个可迭代对象,例如string,tuple,list,di ...