可以使用 lynx 访问被阻止的站点,但不能使用 cURL 或浏览器

信息安全 tls 证书 网页浏览器 审查制度
2021-08-20 06:15:14

我不确定这是否是问这个问题的正确地方,但它就在这里。

我居住的国家的政府已经封锁了wikipedia.org出于好奇,我四处寻找可能确定使用了哪些方法等。将我的默认 DNS 解析器更改为Cloudflare (1.1.1.1) 后,我现在可以使用 CLI 浏览器lynx访问地址https://wikipedia.org . 但是,我无法从我的浏览器 (Safari) 或 cURL 访问该站点。命令的输出给出:curl https://wikipedia.org/ -vv

*   Trying 103.102.166.224...
* TCP_NODELAY set
* Connected to wikipedia.org (103.102.166.224) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /anaconda3/ssl/cacert.pem
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to wikipedia.org:443 
* Closing connection 0
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to wikipedia.org:443 

问题:

  • 从技术角度来看,为什么我无法访问https://wikipedia.org
  • 是什么让lynx可以访问该站点而 cURL 不能?我认为这与 CA 证书和 ssl 有关,但我不明白政府如何修改我设备上的证书。

编辑:为了澄清起见,我对如何绕过这个块或任何东西的评论不感兴趣;显然有很多方法,但它们与这个问题无关。

EDIT1:版本

卷曲:

curl 7.58.0 (x86_64-apple-darwin13.4.0) libcurl/7.58.0 OpenSSL/1.0.2o zlib/1.2.11
Release-Date: 2018-01-24
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets HTTPS-proxy

猞猁:

Lynx Version 2.8.8rel.2 (09 Mar 2014)
libwww-FM 2.14, SSL-MM 1.4.1, OpenSSL 1.0.2o, ncurses 5.7.20081102
Built on darwin17.0.0 Sep 18 2017 16:36:30
1个回答

您的政府可能通过查看 https 握手上的服务器名称指示 (SNI) 并在域在其黑名单上时强制出错来阻止与 wikipedia.org 的连接。

您的 lynx 版本可能没有在 TLS SNI 扩展中提供域服务器,而 Safari 和 curl 都提供。Wikipedia 在 TLS 层没有明确的服务器名称时可以正常工作(它将提供通配符证书 *.wikipedia.org,以 wikipedia.org 作为替代名称,因此它不需要向您的客户端提供不同的证书)。如果您的政府过滤器不满足这种情况(或者只是不想阻止他们没有完整主机名的所有内容),则将允许此类连接,而大多数其他客户端都会失败。

不过,根据lynx 更改日志,我希望您的 lynx 版本支持 SNI(在 2.8.7pre.2 上添加用于 openssl,在 2.8.8dev.15 上用于 GNUTLS)。您可以轻松确认是否提供了数据包转储。