578
同花顺
接入后HTTPS异常(SNI问题)__排错手册_Web 应用防火墙-阿里云
概述
当发现接入Web应用防火墙后,如果出现HTTPS访问异常,可能是由于客户端不支持SNI导致的
问题现象
如果客户端不支持sni,可能会导致如下现象:
1.手机APP客户端,ios客户端可以正常访问,而Android客户端无法正常打开
2.浏览器打开网站,显示证书不可信
问题原因:
随着IPv4地址的短缺,为了让多个域名复用一个IP地址,在HTTP服务器上引入了虚拟主机的概念,服务器可以根据客户端请求中不同的host来将请求交给不同的域名(虚拟主机)来处理。
但在一个被多个域名(虚拟主机)共享IP的HTTPS服务器中,浏览器在访问一个HTTPS站点时,先与服务器建立SSL连接,建立连接的第一步就是请求服务器的证书。而服务器在发送证书的时候,是不知道浏览器访问的是哪个域名的,所以不能根据不同域名发送不同的证书。
SNI(Server Name Indication)是为了解决一个服务器使用多个域名和证书的SSL/TLS扩展。一句话简述它的工作原理就是,在连接到服务器建立SSL链接之前先发送要访问站点的域名(Hostname),这样服务器根据这个域名返回一个合适的证书。目前,大多数操作系统和浏览器都已经很好地支持SNI扩展,OpenSSL 0.9.8已经内置这一功能,新版的nginx也支持SNI。
当使用不支持SNI的浏览器访问Web应用防火墙的网站时,Web应用防火墙因不知道客户端请求的是哪个域名,无法调取对应的虚拟主机证书来跟客户端交互,只能使用内置的一个缺省证书去跟客户端握手,这时在客户端浏览器上会提示“服务器证书不可信”,如下图:
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., ,如果是微信、支付宝第三方回调。需要让其调用源站IP,绕过Web应用防火墙
常见的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 ,及以上版本
如何判断自己的客户端是否支持SNI?
访问https://sni.velox.ch/, 如果使用的客户端(如浏览器)支持SNI,会提示下图:
如果不支持SNI,则会提示证书不可信,继续访问后提示下图:
最后更新:2016-12-01 20:05:28
上一篇:
登陆状态丢失问题__排错手册_Web 应用防火墙-阿里云
下一篇:
接入状态检测异常__排错手册_Web 应用防火墙-阿里云
APP维度推送统计__API列表_OpenAPI 1.0_移动推送-阿里云
批量查看消息__队列接口规范_API使用手册_消息服务-阿里云
路由器接口__用户指南_高速通道-阿里云
AddTags__标签相关API_API 参考_负载均衡-阿里云
取消定时推送任务__推送相关_API 列表_OpenAPI 2.0_移动推送-阿里云
查询任务列表__其他接口_API 参考_云服务器 ECS-阿里云
阿里云付费用户超百万 营收增速降至96%
ALIYUN::ROS::WaitConditionHandle__资源列表_资源编排-阿里云
怎样为一个子用户授予只读访问RDS的权限___云数据库(RDS)授权问题_授权常见问题_访问控制-阿里云
阿里云云服务器 ECS典型应用场景
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云