http - HTTPS 代理中的连接、主机和 SNI

标签 http ssl https sni

连接到代理服务器时,第一条消息是 CONNECT:

CONNECT server.example.com:80 HTTP/1.1
Host: server.example.com:80
如果我理解正确,第一行和第二行的 Host 字段可能不同。
第一行中的主机指示您实际连接到的服务器。在代理转发的情况下,可能会有所不同。
第二行中的主机表示我们请求的站点。
在这种情况下,是否需要 SNI?如果是这样,它们会有所不同吗?

最佳答案

If I understand correctly, the Host field, in the first row and the second row can be different.


Host header 对代理请求没有意义。它仅与最终服务器相关。 CONNECT 请求的 Host header 无论如何都不会发送到最终目的地 - CONNECT 请求中的任何内容都不会发送。

In that case, is the SNI required? And if so can they be different?


作为 CONNECT 请求的结果,在客户端和请求的最终服务器之间建立了一条隧道。最终服务器只会看到来自该隧道的任何内容。由于服务器需要 SNI 来选择证书,因此在通过代理发送 HTTPS 时也需要它 - 否则服务器将不知道要选择哪个证书。

关于http - HTTPS 代理中的连接、主机和 SNI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70989860/

相关文章:

apache - 使用 htaccess 将 HTTPS 重定向到单个 PHP 文件

git: 'remote-https' 不是 git 命令?

java - 使用自签名证书 : hostName not verified 的 Android Https 连接

javascript - 无法获得 Angular 5 的响应标题

更改 postBuffer 后 git push 仍然会出现 RPC 错误

node.js - 在 node.js 中使用 request.body 或 request.params 有什么区别吗?

ssl - 如何使用经过验证的证书设置我的 tomcat?

http - 分布式文件压缩

php - Apache RewriteRule 在 http 下工作,而不是在 https 下工作

java - JVM/Android 不信任 StartSSL 的根证书