立即咨询

电话咨询

微信咨询

立即试用
商务合作

浅谈HTTPS SNI

2021-12-17

什么是SNI?

SNI全称是 Server Name Indication,它是TLS协议的一个扩展,在TLS握手时用来标记客户端的关键信息。https通常使用SNI标记请求域名或主机名,web server能根据SNI快速识别出请求地址,进而实现CDN、WAF、HTTP代理等一些重要特性(SNI是TLS协议扩展,非http服务的TCP+TLS也可以使用SNI完成一些特定功能)。

SNI的作用

曾经,在无SNI或基础库不支持SNI的年代,假如我们要开发一个web代理,这个代理是CDN或WAF系统的一个基础功能。

图片

每个用户系统都接入到web代理系统,由于不支持SNI,为了使代理系统能够区分多用户

我们很自然会想到以下解决方案:

一、每个用户分配唯一的IP;

二、多用户共享IP,使用端口区分,例如,https://ip:port/index;

三、多用户共享一个IP,为每个用户分配唯一的子域名(或主机名),使用DNS别名(cname)到子域名,web代理根据Http头部Host携带的主机名标记来识别请求。

方案一,公网IP有限,根本不实用;

方案二,用户体验差,且通http客户端所在网关只开放了80/443端口,导致web无法访问;

方案三,能很好地完成一些http代理能力,这也是目前常用的http代理方案,但却难以实现一些基于https的新特性。

通常CDN或WAF系统并不是简单的http代理

它还包括以下基础功能:

● 能够解析https,且每个用户使用的自有证书(用户把证书上传到代理系统)

● 需要对每个https请求的内容进行安全检查

● 压缩、缓存、回源等其它功能

要实现上述功能,web代理在收到http请求时首先要知道使用哪个证书来跟客户端进行握手,只有握手成功才能从TLS解密出http内容,这是问题的根本。

因为https是通过TCP+TLS传输的,web代理收到的http内容经过加密的数据,无法确定TCP连接是谁发过来的,web代理拥有众多用户的证书,但究竟拿哪一个证书进行TLS握手?如果每个证书都尝试一遍?这样效率也太低了!但我们发现,尽管TLS传输内容是加密的,但在建立会话的握手阶段,它的报文头是明文(Hello报文),如果客户端能在TLS握手报文里放置标记自已身份的ID那问题就会变得十分简单。

为了解决类似上述的场景,TLS扩展实现了

Server Name Indication(SNI)

图片

Web应用通常使用SNI携带域名或主机名,除了上述的证书加载,还可以实现其它功能,例如,在无法得到用户的SSL证书情况下,网关只需扫描TLS和SNI就可以实现域名安全检查、域备是否备案等。另外,物联网也可以利用SNI标记设备ID,实现TLS的双向认证。

SNI支持情况

 目前绝对大多数浏览器、http服务器以及其所依赖的加密库都支持SNI,下面的SNI支持情况来源于互联网,仅供参考:

桌面浏览器

● Chrome 5及以上版本、Chrome 6及以上版本(Windows XP)

●  Firefox 2及以上版本

●  IE 7及以上版本(运行在Windows Vista

/Server12008及以上版本版本系统中,在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 及以上版本

更多产品了解

欢迎扫码加入云巴巴企业数字化交流服务群

产品交流、问题咨询、专业测评

都在这里!

 

热门数字化产品

绿云软件酒店管理系统绿云软件酒店管理系统,符合大住宿业数字化建设集中化、一体化、平台化、大数据发展趋势,稳定、经济、开放,支持集中+分布式混合部署。基于绿云开放平台,行业上下游合作伙伴均可接口对接,形成智慧互联 。无须担心“数字孤岛”,各系统和场景的数据在保证安全的前提下互联互通 。
网易数帆有数BI有数BI是由网易数帆推出的一款企业级智能大数据敏捷分析平台。无需代码、PPT式简单拖拽即可轻松完成报告与大屏的制作。丰富的在线图表组件、可视化ETL操作、多终端智能预警等能力真正降低了用户的使用门槛,提高了数据使用效率,助力企业实现数据驱动决策。
百度网盘 企业版百度网盘企业版一个网盘用户的多重身份,可随时随地完成“个人版”与“企业版”的切换彼此数据隔离,安全有保障。拥有超大可分配的存储空间,支持超大文件上传 ,一键关注、收藏,重要文件动态全知晓,支持远程收集文件。
阿里云无影云电脑阿里云无影云电脑(WUYING Workspace)是一种易用、安全、高效的云上电脑,支持快速便捷的创建、部署和统一运维管控。自带多重安全管控能力,支持随时随地访问,资源灵活弹性。广泛应用于安全办公、协同研发、教育实训、私域运营、分支门店、客服办公等。
句子互动SCRM系统句子互动SCRM系统,把企业微信账号变成机器人,实现更效率和高频次的触达。基于预设规则和对象特征,让消息推送更智能更精准。 帮助企业打通内外部系统的数据系统,实现更多灵活、更个性化的营销和服务能力开发。同时支持私有部署、iframe嵌入等多种系统接入方式。
为你推荐
2025腾讯产业合作伙伴大会|云巴巴荣获双项大奖,载誉而归

1月16日,2025腾讯产业合作伙伴大会在三亚召开。云巴巴,荣膺“2024腾讯云卓越合作伙伴奖—星云奖”和“2024腾讯云AI产品突出贡献奖”双项大奖

2025-01-17
门店如何选址找旺铺?高德经营通锁定黄金半径,让门店成今夏“长安鲜荔枝”

门店如何选址找旺铺?高德经营通锁定黄金半径,让门店成今夏“长安鲜荔枝”

2025-07-04
连锁门店管理系统怎么选?荣泽科技NSO和拓店易哪个更适合?

连锁门店管理系统怎么选?荣泽科技NSO和拓店易哪个更适合?

2025-07-04
AI时代数据处理工具怎么选?腾讯云Setats流湖引擎解决批流割裂与秒级延迟难题

AI时代数据处理工具怎么选?腾讯云Setats流湖引擎解决批流割裂与秒级延迟难题

2025-07-04
消费金融风控体系怎么选?海纳数科以支付数据驱动全流程精准防控!

消费金融风控体系怎么选?海纳数科以支付数据驱动全流程精准防控!

2025-07-04
查看更多