Skip to content

Instantly share code, notes, and snippets.

@clowwindy
Last active November 26, 2023 03:52
Show Gist options
  • Save clowwindy/5947691 to your computer and use it in GitHub Desktop.
Save clowwindy/5947691 to your computer and use it in GitHub Desktop.
为什么不应该用 SSL 翻墙

SSL 设计目标:

  1. 防内容篡改
  2. 防冒充服务器身份
  3. 加密通信内容

而翻墙的目标:

  1. 不被检测出客户端在访问什么网站
  2. 不被检测出服务器在提供翻墙服务

SSL 和这个目标还是有一些出入。其中最大的问题是,2. 防冒充服务器身份 这个功能多余了。他会导致墙嗅探出证书信息,继而墙会知道服务器身份。如果墙知道一个服务器身份是用来翻墙的,它要做的仅仅是封掉使用这个证书的所有 IP。

墙看见的 SSL 握手响应头部如下:

QMQڑ????β????!AFf?a?1??[?
? G
0???R???̙G!GfX-??5?k ??Q?
u
q
0??1 *?H?? n?0?|0?d?"?7??^??eĵ??F0
0 UUS10U
VeriSign, Inc.10U
VeriSign Trust Network1;09U
140510235959Z0?10 2Terms of use at https://www.verisign.com/rpa (c)061402U+VeriSign Class 3 Extended Validation SSL CA0
+?7<US10
+?7Delaware10Private Organization10U43374461
0 UUS10
U9410710U
San Francisco1!0U 795 Folsom St, Suite 60010U
Twitter, Inc.10U
Twitter Security10U
?0? *?H?? twitter.com0?"0
???w?…?tSmZ ?T#7Tn,?l\C????
??^d?L?*q? ???\n*???*?X?[?????-?b?V?Ic[[ݙn??D??i;?j~,亵Ȯu?z۴Jz9qr??כ????G?#???u2j?7_;?3[Y?&?P???P?@?U?N?,?Tx?e?N???SVߝ???*!Po???Q???!??sIpҒ#`H??U'?"^?*?7
_?>???Z|`W?.p_??????p????v2?p????0?0'U 0?www.twitter.com?
twitter.com0 U00U?x?Fy?n?]@H?G???(?1?0
U?0BU;0907?5?3?1http://EVSecure-crl.verisign.com/EVSecure2006.crl0DU =0;09
`?H??E0*+https://www.verisign.com/rpa0U%+0U#0???P???%Z{U?O?c??XkC0+p0n0+0?!http://EVSecure-ocsp.verisign.com0+0?1http://EVSecure-aia.verisign.com/EVSecure2006.cer0+
b0`?^?\0Z0X0V image/gif0!00+Kk?(?
? ??*?H??K?!0&$http://logo.verisign.com/vslogo1.gif0
??Z
GD?𥛄8ݫ?NJnJXn?????]?? -";J?#O????
<r?Q&?.??;? F
?????K??Fq?mD?-?Sl??=3???]?.??=v?I???
???ѱ??)i?Y!K?L???GC??rI0IR??f!~
b4˼??]?b?????_5a=?-B¹ax???rif߰?j?[??j?????3???d?Ўo
kS
?m'?9????X?H???`ln?n%???ߍ5G?H?!w?+x:
?u?86K?[,!?z?ipŵh?4uf????/N? Dt?'\??d+A???]?? ??gqP???V{?0c?1??mKǫ??o;
@kuyur
Copy link

kuyur commented Sep 5, 2017

如果客户端预存服务器的证书(公钥),跳过通过网络获取服务器证书这一步,是否可以减少大量的握手特征?

用于翻墙的https代理服务器,其实不需要CA,一个自签署的证书就足够了,而且公钥可以根本不公开。

当然这改造版的https协议不再是一个标准的https协议,实现起来不能用现有的各种包。

@kimomoki
Copy link

完全看不懂,举脚支持

@lersh
Copy link

lersh commented Oct 27, 2017

如果自己签署一个阿里,苹果,微软,腾讯这样大公司的证书呢,O,T,CN这些都完全模仿已有的证书, 是否可以伪装成链接的是合法的网站呢。至于承载的内容,墙肯定是无法得知的。

@SerCom-KC
Copy link

TLS 1.3 大概可以解决这个问题了吧 🤔

@MeowFET
Copy link

MeowFET commented Mar 12, 2019

Firewalls 仅通过证书判断某台 HTTPS 服务器的身份是困难的,对于非公开、非商业运营的使用场景,不失为一种方案。

@yufish
Copy link

yufish commented Mar 22, 2019

关于对抗 GFW 的特征检测
不论是 Shadowsocks 还是 VPN 或 SSH 隧道,共性都很明显——长时间的 TCP 长连接。
这样一种特征,非常明显是被用来翻墙。

或许可以考虑换一种思路:
用普通的,明文的 HTTP 请求来承载上层的翻墙数据。

以 SOCKS 代理为例:
把 SOCKS 代理切割成两个部分,一部分部署在客户端,一部分部署在 VPS。
两者之间的通讯,伪装成普通的,明文的 HTTP 流量。
(表面上看,像是明文的,但是承载的数据,依然用加密方式,比如打包成图片的内容)

这时候,SOCKS代理的客户端部分,对本地开启SOCKS 监听端口,然后把数据包装成 HTTP 发送到 VPS 的服务端。VPS 的部分再解包,重新转化为原始的 SOCKS 流量发送到最终目的 IP

对本地的网络软件而言,看到的依然是普通的 SOCKS 代理,因此浏览器或 IM 可以无缝兼容。

这样的流量特征,就非常类似于平时访问网站的流量特征。可以避免被 GFW 察觉。
如果伪装得好,即使是 Ghost Assassin 在 7单元 提到的“人工审核”,也可以骗过。

转载自:http://program-think.blogspot.com/2015/02/Princelings.html?comment=1423062885928

底层改为伪造的明文图片类http连接而不是长连接,会不会大幅度降低传输效率?

@Ad-superman
Copy link

Finally, may the Force be with you

@Ad-superman
Copy link

不知该说什么,GFW已经对TLS系列具备攻击能力了

@chenjie
Copy link

chenjie commented Dec 27, 2019

如果墙知道一个服务器身份是用来翻墙的

This is a big if. trojan-gfw is implemented almost entirely based on SSL. Let's see if it works.

@fbion
Copy link

fbion commented Mar 11, 2020

naive trojan ws tls v2

@xirotech
Copy link

等哪天领导在天安门喊上一句话 "中华人民共和国 天朝局域网 正式 · 成立啦啊啊啊啊啊啊啊"
到时候看你们这些妖魔鬼怪 飞天遁地 八仙过海 各显神通
能不能飞得出老佛爷的五指山 :XD

@960PRO
Copy link

960PRO commented Aug 2, 2020

致敬前辈,TLS1.3正在普及中——ESNI功能将域名也加密了。有了依附的自由,今后流量伪装更方便了。

@arloor
Copy link

arloor commented Aug 9, 2020

致敬前辈,TLS1.3正在普及中——ESNI功能将域名也加密了。有了依附的自由,今后流量伪装更方便了。

https://www.iyouport.org/%E6%8A%A5%E5%91%8A%EF%BC%9A%E4%B8%AD%E5%9B%BD%E7%9A%84%E9%98%B2%E7%81%AB%E9%95%BF%E5%9F%8E%E5%B7%B2%E7%BB%8F%E5%B0%81%E9%94%81%E5%8A%A0%E5%AF%86%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8D%E7%A7%B0%E6%8C%87/

GFW开始研究ESNI了

@genufish
Copy link

致敬前辈,TLS1.3正在普及中——ESNI功能将域名也加密了。有了依附的自由,今后流量伪装更方便了。

esni已经被封了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment