服务器名称指示SNI
程序员文章站
2022-07-12 22:31:40
...
SNI介绍
由于服务器能力的增强,在一台物理服务器上部署多个虚拟主机已经成为十分流行的做法了。在过去的 HTTP 时代,解决基于名称的主机同一 ip 地址上托管多个网站的问题并不难。当一个客户端请求某特定网站时,把请求的域名作为主机头(host)放在 http header 中,从而服务器根据域名可以知道把该请求引向哪个域名服务,并把匹配的网站传送给客户端。但是此方式到 https 就失效了,因为 SSL 在握手的过程中,不会有 host 信息,所以服务端通常返回配置中的第一个可用证书,这就导致不同虚拟主机上的服务不能使用不同证书(但在实际中,证书通常是与服务对应。)。
为了解决此问题,产生了 SNI,SNI 中文名为服务器名称指示,是对 SSL/TLS 协议的扩展,允许在单个 IP 地址上承载多个 SSL 证书。SNI 的实现方式是将HTTP 头插入到 SSL 的握手中,提交请求的 Host 信息,使得服务器能够切换到正确的域并返回相应的正确证书。
SNI(ServerName Indication)定义在RFC 4366,是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用。它允许客户端在发起SSL握手请求时(具体说来,是客户端发出SSL请求中的ClientHello阶段),就提交请求的Host信息,使得服务器能够切换到正确的域并返回相应的证书。在 TLSv1.2(OpenSSL 0.9.8)版本开始支持。
Extension: server_name
Type: server_name (0x0000)
Length: 16
Server Name Indication extension
Server Name list length: 14
Server Name Type: host_name (0)
Server Name length: 11
Server Name: nex.163.com
这里指定了该 TLS 握手的目标域名为 nex.163.com 。
通过 SNI,拥有多虚拟机主机和多域名的服务器就可以正常建立 TLS 连接了。
利用方法
利用SNI实现域前置,隐藏C2回连真实主机
参考:
https://evi1cg.me/archives/Domain_Fronting.html
https://www.anquanke.com/post/id/195011
推荐阅读
-
Win7系统日志提示在没有配置的 DNS 服务器响应之后,名称“域名”的名称解析超时的解放方法
-
sql2008安装后服务器改名造成名称不一致解决方法
-
SQL Server复制需要有实际的服务器名称才能连接到服务器
-
SQL语句实现查询SQL Server服务器名称和IP地址
-
修改计算机名并更新sqlserver中存储的服务器名称
-
服务器名称指示SNI
-
IIS服务器中的一些名称、术语、概念解释
-
在没有配置的 DNS 服务器响应之后,名称域名的名称解析超时问题的解决方法
-
linux系统下如何修改服务器名称参考方法
-
.Net使用SmtpClient发送邮件,报错:不允许使用邮箱名称。 服务器响应为: xxxw