使用 curl 和 openssl 命令简单测试 SNI 阻断
-
Reference: https://www.v2ex.com/t/852567
需要连接墙外能连上的 IP 地址,比如 https://www.cnbc.com 的
23.56.20.124
(注意下面评论提到 cloudflare 的 IP 被 SNI 阻断后会造成整个 IP 阻断,所以不要用 cloudflare 的测试,不过可以用 akamai 的 IP 测试:dig www.akamai.com
),然后分别测试即可openssl
没有 SNI 阻断
openssl s_client -connect 23.56.20.124:443 -servername abc123.com
这个和 v2ex 原帖的输出不一样,因为使用的不是 cloudflare 的 IP 地址,行为完全不同。
23.56.20.124
目前对错误的 SNI 也会有 TLS 连接,正常 TLS 连接的输出很长,就不一一列出了,可以看到 TLS 证书的被签名的域名depth=0 C = US, ST = New Jersey, L = Englewood, O = "NBCUniversal Media, LLC", CN = *.cnbc.com
有 SNI 阻断
openssl s_client -connect 23.56.20.124:443 -servername twitter.com
什么都没有,TLS 握手读取到 0个字节,当然也没有 TLS 证书
no peer certificate available SSL handshake has read 0 bytes and written 315 bytes
curl
没有 SNI 阻断
curl --resolve abc123.com:443:23.56.20.124 https://abc123.com -iv
建立了 TLS 连接,不过 curl 认为和 https:// 的域名不符,拒绝连接
* Server certificate: * subject: C=US; ST=New Jersey; L=Englewood; O=NBCUniversal Media, LLC; CN=*.cnbc.com * start date: Oct 1 00:00:00 2023 GMT * expire date: Oct 1 23:59:59 2024 GMT * subjectAltName does not match abc123.com * SSL: no alternative certificate subject name matches target host name 'abc123.com'
有 SNI 阻断
curl --resolve twitter.com:443:23.56.20.124 https://twitter.com -iv
什么都没有,除了来自 GFW 的 RST
* Recv failure: Connection reset by peer
-
GFW可恶,还是得推广eSNI/ECH
https://blog.cloudflare.com/encrypted-client-hello/