Всем здравствуйте.
Дано: есть некий HTTPS-ресурс, про который известно, что он может отвечать, используя TLS 1.2. И есть правильно (до определённой степени) настроенные iptables
:
# HTTP traffic blocked by the ISP
-A INPUT -p tcp --sport 80 -m string --string "Location: http://195.94.233.66?UrlRedir=http%3A%2F%2F" --algo bm -j DROP
-A INPUT -p tcp --sport 80 -m string --string "Location: http://stop.seven-sky.net" --algo bm -j DROP
-A INPUT -p tcp --sport 80 -m string --string "Location: http://95.167.13.50/?st" --algo bm -j DROP
-A INPUT -p tcp --sport 80 -m string --string "Location: http://blackhole.beeline.ru" --algo bm -j DROP
# HTTPS traffic blocked by the ISP
-A INPUT -p tcp --sport 443 --tcp-flags RST RST -j DROP
И вот теперь я пытаюсь зайти на этот самый ресурс по HTTPS:
$ wget --inet4-only --https-only --secure-protocol=TLSv1_2 -O - https://www.linkedin.com
--2021-10-06 14:33:28-- https://www.linkedin.com/
Resolving www.linkedin.com (www.linkedin.com)... 13.107.42.14
Connecting to www.linkedin.com (www.linkedin.com)|13.107.42.14|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 88377 (86K) [text/html]
Saving to: ‘STDOUT’
- 0%[ ] 0 --.-KB/s <!DOCTYPE html>
<html lang=ru>
<head>
<link rel="stylesheet" type="text/css" href="/waltz/combined.css?20210926-1635">
<link rel="yandex-tableau-widget" href="/manifest.json" />
<meta name="referrer" content="always">
<title>LINUX.ORG.RU — Русская информация об ОС Linux</title>
...
Всё хорошо. А теперь попробуем то же самое с помощью curl
:
$ curl -v --tlsv1.2 --tls-max 1.2 https://linkedin.com
* Expire in 0 ms for 6 (transfer 0x55acfeaa3f50)
...
* Expire in 50 ms for 1 (transfer 0x55acfeaa3f50)
* Trying 13.107.42.14...
* TCP_NODELAY set
* Expire in 149971 ms for 3 (transfer 0x55acfeaa3f50)
* Expire in 200 ms for 4 (transfer 0x55acfeaa3f50)
* Connected to linkedin.com (13.107.42.14) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* Operation timed out after 300179 milliseconds with 0 out of 0 bytes received
* Closing connection 0
curl: (28) Operation timed out after 300179 milliseconds with 0 out of 0 bytes received
И тишина. И, что характерно, причина отнюдь не в User-Agent
, потому что curl -A 'Wget/1.20.1 (linux-gnu)' -v --tlsv1.2 --tls-max 1.2 https://www.linkedin.com
тоже не получает ответа.
Совершенно аналогичным образом, lynx
и elinks
как раз работают, а w3m
, links
и обычные браузеры как раз нет.
В чём разница?
Update: openssl s_client -connect www.linkedin.com:443
лишь устанавливает TCP-соединение, и не более того, так что отладочной информации, увы, нет.
Update 2: призываю всех проголосовать за Issue 908132: FR: Support for Encrypted SNI (ESNI).