上下文:配置了主机名标头和 TLS 证书的 IIS 网站。
当客户端发起与指定站点的连接时,这是正确的流程吗?
- 客户端(浏览器)执行 DNS 查找
- 与服务器建立 TCP 连接
- 客户端(浏览器)构建 TLS 有效负载,其中包括 SNI(即站点名称),并开始与服务器握手
- 服务器在其站点绑定证书列表中查找具有指定名称的证书并响应
- 一旦建立 TLS,IIS 网络服务器就会使用 HOST 标头值将 HTTP 请求路由到特定站点。
根据我的理解,SNI 是服务器查找站点证书的基本信息。
如果在 TLS 握手之后我实际修改了 HTTP Host 标头以定位其他网站,会发生什么情况?这可能吗?
答案1
RFC 6066 第 11.1 节部分内容如下:
由于客户端可以在应用程序协议中提供不同的 server_name,因此依赖这些名称相同的应用程序服务器实现必须检查以确保客户端没有在应用程序协议中提供不同的名称。
Web 服务器实际执行此操作的方式可能有所不同。Apache 和 nginx 都直接拒绝此类连接,但奇怪的是 Apache 有一个关闭此功能的选项。不知道 IIS 会做什么,但希望它是合理的。您可以轻松地自己测试它。