web-dev-qa-db-ja.com

lynxを使用してブロックされたサイトにアクセスできますが、cURLもブラウザーも使用できません

これがこれを尋ねるのに適切な場所であるかどうかはわかりませんが、ここにあります。

私が住んでいる国の政府がブロックしている wikipedia.org 。好奇心から、私はおそらくどの方法が使用されたかなどを確認するためにいじっていました。デフォルトのDNSリゾルバーを Cloudflare (1.1.1.1)に変更した後、アドレスにアクセスできるようになりました https://wikipedia.org CLIブラウザを使用lynx。ただし、ブラウザ(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
4
mlg556

おそらく政府は、httpsハンドシェイクでサーバー名表示(SNI)を調べ、ドメインがブラックリストにある場合はエラーを強制することにより、wikipedia.orgへの接続をブロックしている可能性があります。

Safariとcurlの両方が提供しているバージョンのlynxは、おそらくTLS SNI拡張でドメインサーバーを提供していません。ウィキペディアはTLSレイヤーで明示的なサーバー名がなくても正常に動作します(ウィキペディア.orgを代替名として使用してワイルドカード証明書* .wikipedia.orgを提供しているため、クライアントに別の証明書を提示する必要はありません)。政府のフィルターがそのケースに対応しなかった場合(または単に完全なホスト名を持たないすべてのものをブロックしたくない場合)、そのような接続は許可され、他のほとんどのクライアントは失敗します。

lynx changelog によると、私はあなたのlynxバージョンがSNIをサポートすることを期待しています(opensslの2.8.7pre.2、GNUTLSの2.8.8dev.15で追加)。パケットダンプが提供されているかどうかを簡単に確認できます。

1
Ángel