高防/WAF中SNI引发的https访问异常问题__运维问题_产品常见问题_DDoS 高防IP-阿里云
什么是SNI
, 随着,IPv4,地址的短缺,为了让多个域名复用一个,IP,地址,我们在,HTTP,服务器上引入了虚拟主机的概念,服务器可以根据客户端请求中不同的,host,来将请求交给不同的域名(虚拟主机)来处理。
,但在一个被多个域名(虚拟主机)共享,IP,的,HTTPS,服务器中,由于在握手建立之前服务器看不到客户端请求的是哪个,host,,所以无法将请求交给特定的虚拟主机;而要完成握手,又必须读取虚拟主机配置中的证书信息。SNI(,Server Name Indication,)就是用来解决这个看似矛盾的问题,它要求客户端在与服务器握手时就携带要访问域名的,host,信息,这样服务器就知道用哪个虚拟主机的证书去跟客户端握手并建立,TSL,连接了。
,SNI,最早在,2004年就提出了,目前主流的新版浏览器、服务器和测试工具都已支持,详情请参考最后一部分。
为什么高防/WAF中必须要求客户端支持SNI
,高防,/WAF,在反向代理,HTTPS,业务时,需要代理客户端去跟真实服务器(,RS,)交互,所以需要在配置,HTTPS,防护时上传证书和私钥。真实的高防和,WAF服务器,数量是有限的,对于用户上万的域名显然不可能满足一个域名一台物理服务器,,所以整个高防,/WAF,集群必然要多个域名复用相同的服务器,,这样就要求客户端必须支持,SNI,,才能正常与高防,/WAF,交互。
,当使用不支持,SNI,的浏览器访问高防,/WAF,防护的网站时,高防,/WAF,因不知道客户端请求的是哪个域名,无法调取对应的虚拟主机证书来跟客户端交互,只能使用内置的一个缺省证书去跟客户端握手,这时在客户端浏览器上会提示,“,服务器证书不可信,”,,如下图:
,
注意:即便RS只有一个域名(即没有复用IP),可以不需要支持SNI,但因为高防/WAF在中间反向代理,而客户端必须先与高防/WAF建立连接,所以还是需要客户端支持SNI的。
Nginx/Apache的服务器端SNI实现
, 如需要配置服务器支持,SNI,,可参考这两篇文章:
,Nginx,:,https://www.ttlsa.com/web/multiple-https-host-nginx-with-a-ip-configuration/
,Apache,:,https://www.ttlsa.com/apache/multi-https-virtual-host-apache-mod_gnutls/
客户端不支持SNI如何解决
, SNI,是一个很便利的扩展,随着,IPv4,地址的耗尽,全面支持,SNI,是趋势。对于不支持,SNI,的客户端,我们有两个解决方案:
,1., ,建议用户升级或使用新版本的浏览器,如,Chrome,、,Firefox,等(强烈推荐)
,2., ,在高防,不配置七层网站防护,只采用四层,443,端口转发(风险:无法防护,CC,攻击)
常见的SNI支持情况
注意: SNI兼容TLS1.0及以上的协议,但不被SSL支持。
,
,桌面版浏览器支持
- ,Chrome 5,及以上版本
- ,Chrome 6,及以上版本(,Windows XP,)
- ,Firefox 2,及以上版本
- ,IE 7,及以上版本(运行在,Windows Vista/Server 2008,及以上版本版本系统中,,在,XP,系统中任何版本的,IE,浏览器都不支持,SNI,)
- ,Konqueror 4.7 ,及以上版本
- ,Opera 8 ,及以上版本
- ,Safari 3.0 on Windows Vista/Server 2008 ,及以上版本,, or Mac OS X 10.5.6 ,及以上版本
, ,手机端浏览器支持
- ,Android Browser on 3.0 Honeycomb ,及以上版本
- ,iOS Safari on iOS 4 ,及以上版本
- ,Windows Phone 7 ,及以上版本
, ,服务器支持
- , Apache 2.2.12 ,及以上版本
- ,Apache Traffic Server 3.2.0 ,及以上版本
- ,Cherokee
- ,HAProxy 1.5 ,及以上版本
- ,IIS 8.0 ,及以上版本
- ,lighttpd 1.4.24 ,及以上版本
- ,LiteSpeed 4.1 ,及以上版本
- ,nginx 0.5.32 ,及以上版本
, ,命令行支持
- ,cURL 7.18.1 ,及以上版本
- ,wget 1.14 ,及以上版本
, ,库支持
- , GNU TLS
- ,JSSE (Oracle Java) 7 ,及以上版本,, ,仅作为客户端
- ,libcurl 7.18.1 ,及以上版本
- ,NSS 3.1.1 ,及以上版本
- ,OpenSSL 0.9.8j ,及以上版本
- ,OpenSSL 0.9.8f ,及以上版本,需配置,flag
- ,Qt 4.8 ,及以上版本
最后更新:2016-07-12 13:53:02
上一篇:
新购买ECS或重置ECS后安全部署方法__技术分享_技术运维问题_漏洞扫描-阿里云
下一篇:
防御WordPress反射_阿里云帮助中心-阿里云,领先的云计算服务提供商
云服务器 ECS使用须知
SetVServerGroupAttribute__VServerGroup相关API_API 参考_负载均衡-阿里云
API说明__产品简介_推荐引擎-阿里云
制作报表-仪表板__制作报表_Quick BI-阿里云
生命周期管理__Java-SDK_SDK 参考_对象存储 OSS-阿里云
在哪里可以查到OSS的权限定义___对象存储(OSS)授权问题_授权常见问题_访问控制-阿里云
错误码表__错误说明_API 网关-阿里云
Encrypt__API 参考_密钥管理服务-阿里云
子账号访问__授权管理_阿里云物联网套件-阿里云
分享文件__快速入门_对象存储 OSS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云