ssh 是否使用 sni headers 以及 SNI 如何注入 ssh 隧道连接

does ssh use sni headers and how SNI inject to ssh tunnel connection

有很多工具可以更改数据包中的sni。 ssh 是否使用 sni 或 HTTP 注入器如何喜欢软件更改 SNI 并浏览互联网。

SNI 是 TLS 协议的扩展,允许客户端在连接握手期间指定虚拟域,如 part of the ClientHello message

SSH 和 TLS 是不同的协议,SSH 不使用 SNI。在发出 HTTPS 请求时更改 SNI 只需要更改 TLS 客户端在连接时呈现给目标服务器的值,默认情况下,该值是用于解析 TLS 服务器 IP 地址的主机名;这可以通过 openssl 来完成,例如,甚至可以通过手动添加条目到您的 /etc/hosts,将伪造的主机名指向 TLS 服务器 IP 地址并使用前者连接到后者。在这些情况下,TLS 客户端会抱怨服务器证书与您使用的主机名 (SN​​I) 之间的名称不匹配 - 但通常可以将其关闭。

以下是如何在使用 openssl 的 www.google.com 连接到 www.google.com 时使用伪造的 SNI example.com =13=] 参数:

openssl s_client -connect www.google.com:443 -servername example.com

下面是如何使用 cURL 执行完整的 HTTPS 请求,传递 --insecure 选项以阻止它抱怨证书名称不匹配以及手动指定 Host header(cURL 否则会从传递的 URL 中获取),--connect-to 参数用于 解析 我们的 host:port 伪造的一对:

curl --connect-to example.com:443:www.google.com:443 --insecure \
     -H "Host: www.google.com" https://example.com/