pkuanvil
    • 版块
    • 标签
    • 帮助
    • 注册
    • 登录

    使用 curl 和 openssl 命令简单测试 SNI 阻断

    Networking
    2
    2
    1.1k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • test1T
      test1
      最后由 test1 编辑

      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
      
      1 条回复 最后回复 回复 引用 0
      • ?
        游客
        最后由 编辑

        GFW可恶,还是得推广eSNI/ECH
        https://blog.cloudflare.com/encrypted-client-hello/

        1 条回复 最后回复 回复 引用 0
        • 1 / 1
        • 第一个帖子
          最后一个帖子