首页 > 解决方案 > ssh 是否使用 sni 标头以及 SNI 如何注入 ssh 隧道连接

问题描述

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

标签: sshhttp-headersssh-tunnelsni

解决方案


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

这里是如何使用 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/

推荐阅读