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

wis*_*ler 6 ssh http-headers ssh-tunnel sni

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

Efr*_*isi 5

SNI 是 TLS 协议的扩展,它允许客户端在连接握手期间指定虚拟域,作为消息的一部分ClientHello

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

以下是如何在使用 openssl参数连接到www.google.com时使用假 SNI example.com-servername

openssl s_client -connect www.google.com:443 -servername example.com
Run Code Online (Sandbox Code Playgroud)

以下是如何使用 cURL 执行完整的 HTTPS 请求,传递选项--insecure以阻止其抱怨证书名称不匹配,以及手动指定标Host头(否则 cURL 将从传递的 URL 中获取),并使用--connect-to用于解析的参数我们的主机:端口与真实的一对:

curl --connect-to example.com:443:www.google.com:443 --insecure \
     -H "Host: www.google.com" https://example.com/
Run Code Online (Sandbox Code Playgroud)