ssh - ssh 是否使用 sni 标头以及 SNI 如何注入 ssh 隧道连接
问题描述
有很多工具可以更改数据包中的 sni。ssh 是否使用 sni 或 HTTP 注入器喜欢软件如何更改 SNI 并浏览互联网。
解决方案
SNI 是 TLS 协议的扩展,它允许客户端在连接握手期间指定一个虚拟域,作为消息的一部分ClientHello
。
SSH 和 TLS 是不同的协议,SSH 不使用 SNI。在发出 HTTPS 请求时更改 SNI 只需要更改 TLS 客户端在连接时呈现给目标服务器的值,即默认情况下用于解析 TLS 服务器 IP 地址的主机名;例如,这可以通过 openssl 来完成,甚至可以通过手动添加一个条目到您的/etc/hosts中,将伪造的主机名指向 TLS 服务器 IP 地址并使用前者连接到后者。在这些情况下,TLS 客户端会抱怨服务器证书与您正在使用的主机名 (SNI) 之间的名称不匹配 - 但通常可以将其关闭。
以下是使用 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/
推荐阅读
- java - Gson - 反序列化不同类型
- gis - 如何将具有不同缩放级别的图层添加到geoserver中的图层组?
- r - 将表中的 xlsx 文件导出为单独的过滤列
- user-interface - Rundeck 分支用户选项
- ios - ItunesConnect - 您的帐户很快需要迁移到联合身份验证
- php - 在 Laravel 中安装 Dropone 时严重性较低
- node.js - React Frontend 与 Go API 集成不同端口问题
- jasper-reports - jasperreports 具有多列的子报表无法正确打印
- python - 并排打印列表
- docker - K6 InfluxDB + Grafana Docker:如何预加载仪表板