浅谈HTTPS SNI

来源: 云巴巴 2021-12-17 11:08:52

什么是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 及以上版本

更多产品了解

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

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

都在这里!

 

评论列表

为你推荐

你知道什么是内容分发网络吗?

你知道什么是内容分发网络吗?

内容分发网络所属于互联网技术,准确的说可以叫做内容分发网络编辑,简称CDN,它的全称是Content Delivery Network,即内容分发网络。其基本思路是,尽可能避开互联网上所有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快,

2020-04-27 18:05:06

如果您不知道什么是CDN的话,云巴巴带您研究

如果您不知道什么是CDN的话,云巴巴带您研究

CDN的权威释义是:构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,从而降低网络拥塞,提高用户访问响应速度和命中率。

2022-11-24 10:09:05

腾讯云ECDN在金融行业的应用

腾讯云ECDN在金融行业的应用

腾讯云ECDN全站加速网络能够为互联网金融、银行、保险、券商等金融行业的网页和移动端app,提供一站式动静混合加速服务,包括纯动态资源和动静混合资源加速,并配有HTTPS加密传输与基础访问控制等安全能力,确保用户网页站点和业务操作稳定流畅又安全

2022-11-24 10:18:45

有关内容分发网络CDN的相关知识介绍

有关内容分发网络CDN的相关知识介绍

CDN,中文名叫做教学内容进行分发信息网络,尽管我国互联网技术帮助我们能够实现了地球村,它的作用是通过减少文化传播时延,找最近的节点,实际上,但是从中国到日本和从中国大陆到中国以及台湾省的时延仍旧是一个不一样的,这一点企业可以从 ping 和 tracer

2022-11-21 17:25:48

为什么越来越多的用户选择腾讯云CDN

为什么越来越多的用户选择腾讯云CDN

腾讯云CDN在目前CDN市场上具有领先地位,不管是节点数量、带宽规模,还是技术实力、售后保障,腾讯云CDN都有着强大的竞争力。

2022-11-24 10:34:29

5G视频爆发,寻找合适的CDN服务已刻不容缓

5G视频爆发,寻找合适的CDN服务已刻不容缓

随着5G,光纤,智能手机的普及,网络视频的业务越来越受欢迎,特别是受本次新冠肺炎疫情发展影响,在线看剧、视频会议、视频办公、视频教学教学等几乎成为了一个时下最主流的交流活动形式。 但在线视频流量的激增也带来了一些问题,

2020-04-08 17:45:27

严选云产品

腾讯云企业品牌保护解决方案 腾讯云企业品牌保护解决方案,借助腾讯生态优势,实现仿冒防伪查询系统的发现和处置,掌握区域可增值空间,强化区域管控能力,帮助企业全网监测仿冒侵权网页、有效拦截欺诈钓鱼网址、全球范围封停非法网站的一体化品牌保护解决方案。
八方互动3D i-DM智能数字营销平台 八方互动3D i-DM智能数字营销平台拥有领先的交互式3D数字化技术及服务,能够有效提升体验和认知。以及3D交互及远程服务,提升远程服务及参与度,同时多渠道应用引流,多维数字化交互方式接入。
Talend数据集成 Talend数据集成是一个企业数据集成工具,用于连接、访问和管理从任何源到几乎任何目标的任何数据。
树字工厂OEE采集系统 树字工厂OEE采集系统用于任何年代的任何生产设备。联网实时记录设备运行状态,便于掌握生产的稳定性。实时记录设备生产每一个节拍时点,便于分析节拍的异常,方便追溯还原生产过程情况。
亿格云SASE办公安全一体化解决方案 亿格云SASE通过融合网络和安全来重构办公安全体系,网络零侵入、应用零改造,快速落地零信任。全网办公零信任实现内外网统一的应用安全访问,防范失陷终端横向移动。支持多个身份源 + 多种二次认证方式,用户|设备|位置|时间|进程|风险,多维动态访问控制。
帆软FineDataLink一站式数据集成平台 帆软FineDataLink一站式数据集成平台,可视化整合多源异构数据,高效搭建企业级数据仓库,实时同步数据(跨地域跨业务),提升业务数据时效性。依托于API构建企业级数据资产,互通共享,云上数据快速下云备份,提升数据管理规范性。

推荐视频

甄选10000+数字化产品 为您免费使用

申请试用