ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ืžื‘ื•ื

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3
ืœืžืขืจื›ื•ืช ืกื™ื ื•ืŸ ืชื•ื›ืŸ ืืจื’ื•ื ื™ื•ืช ืžื•ื“ืจื ื™ื•ืช ืžื™ืฆืจื ื™ื ื™ื“ื•ืขื™ื ื›ืžื• Cisco, BlueCoat, FireEye ื™ืฉ ืœื ืžืขื˜ ื‘ืžืฉื•ืชืฃ ืขื ืขืžื™ืชื™ื”ื ื”ื—ื–ืงื•ืช ื™ื•ืชืจ - ืžืขืจื›ื•ืช DPI, ืืฉืจ ืžื™ื•ืฉืžื•ืช ื‘ืื•ืคืŸ ืคืขื™ืœ ื‘ืจืžื” ื”ืœืื•ืžื™ืช. ืžื”ื•ืช ื”ืขื‘ื•ื“ื” ืฉืœ ืฉื ื™ื”ื ื”ื™ื ื‘ื“ื™ืงืช ืชืขื‘ื•ืจืช ืื™ื ื˜ืจื ื˜ ื ื›ื ืกืช ื•ื™ื•ืฆืืช ื•ื‘ื”ืชื‘ืกืก ืขืœ ืจืฉื™ืžื•ืช ืฉื—ื•ืจื•ืช/ืœื‘ื ื•ืช, ืงื‘ืœืช ื”ื—ืœื˜ื” ืœืืกื•ืจ ืืช ื”ื—ื™ื‘ื•ืจ ืœืื™ื ื˜ืจื ื˜. ื•ืžื›ื™ื•ื•ืŸ ืฉืฉื ื™ื”ื ืžืกืชืžื›ื™ื ืขืœ ืขืงืจื•ื ื•ืช ื“ื•ืžื™ื ื‘ื™ืกื•ื“ื•ืช ืขื‘ื•ื“ืชื, ื’ื ืœืฉื™ื˜ื•ืช ืขืงื™ืคืชื ื™ื”ื™ื” ื”ืจื‘ื” ืžืŸ ื”ืžืฉื•ืชืฃ.

ืื—ืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ืฉืžืืคืฉืจื•ืช ืœืš ืœืขืงื•ืฃ ื‘ืฆื•ืจื” ื“ื™ ื™ืขื™ืœื” ื”ืŸ DPI ื•ื”ืŸ ืžืขืจื›ื•ืช ืืจื’ื•ื ื™ื•ืช ื”ื™ื ื˜ื›ื ื•ืœื•ื’ื™ื” ื—ื–ื™ืชื™ืช ืœืชื—ื•ื. ื”ืžื”ื•ืช ืฉืœื• ื”ื™ื ืฉืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืžืฉืื‘ ื—ืกื•ื, ืžืกืชืชืจื™ื ืžืื—ื•ืจื™ ืชื—ื•ื ืฆื™ื‘ื•ืจื™ ืื—ืจ ืขื ืžื•ื ื™ื˜ื™ืŸ ื˜ื•ื‘, ืฉื›ืžื•ื‘ืŸ ืœื ื™ื™ื—ืกื ืขืœ ื™ื“ื™ ืืฃ ืžืขืจื›ืช, ืœืžืฉืœ google.com.

ืœื ืžืขื˜ ืžืืžืจื™ื ื›ื‘ืจ ื ื›ืชื‘ื• ืขืœ ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ื”ื–ื• ื•ื ื™ืชื ื• ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช. ืขื ื–ืืช, ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”-DNS-over-HTTPS ื•ื”-SNI ื”ืคื•ืคื•ืœืจื™ื•ืช ื•ื”ื ื“ื•ื ื•ืช ืœืื—ืจื•ื ื”, ื›ืžื• ื’ื ื”ื’ืจืกื” ื”ื—ื“ืฉื” ืฉืœ ืคืจื•ื˜ื•ืงื•ืœ TLS 1.3, ืžืืคืฉืจื™ื ืœืฉืงื•ืœ ืืคืฉืจื•ืช ื ื•ืกืคืช ืœื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ.

ื”ื‘ื ืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื”

ืจืืฉื™ืช, ื‘ื•ืื• ื ื’ื“ื™ืจ ืžืขื˜ ืžื•ืฉื’ื™ื ื‘ืกื™ืกื™ื™ื ื›ืš ืฉืœื›ืœ ืื—ื“ ืชื”ื™ื” ื”ื‘ื ื” ืžื™ ื”ื•ื ืžื™ ื•ืœืžื” ื›ืœ ื–ื” ื ื—ื•ืฅ. ื”ื–ื›ืจื ื• ืืช ืžื ื’ื ื•ืŸ ื”-eSNI, ืฉืชืคืขื•ืœื• ื™ื™ื“ื•ืŸ ื‘ื”ืžืฉืš. ืžื ื’ื ื•ืŸ eSNI (ืื™ื ื“ื™ืงืฆื™ื™ืช ืฉื ืฉืจืช ืžื•ืฆืคื ืช) ื”ื•ื ื’ืจืกื” ืžืื•ื‘ื˜ื—ืช ืฉืœ SNI, ื–ืžื™ื ื” ืจืง ืขื‘ื•ืจ ืคืจื•ื˜ื•ืงื•ืœ TLS 1.3. ื”ืจืขื™ื•ืŸ ื”ืžืจื›ื–ื™ ื”ื•ื ืœื”ืฆืคื™ืŸ, ื‘ื™ืŸ ื”ื™ืชืจ, ืžื™ื“ืข ืœืื™ื–ื” ื“ื•ืžื™ื™ืŸ ื ืฉืœื—ืช ื”ื‘ืงืฉื”.

ื›ืขืช ื ืกืชื›ืœ ื›ื™ืฆื“ ืคื•ืขืœ ืžื ื’ื ื•ืŸ ื”-eSNI ื‘ืคื•ืขืœ.

ื ื ื™ื— ืฉื™ืฉ ืœื ื• ืžืฉืื‘ ืื™ื ื˜ืจื ื˜ ืฉื ื—ืกื ืขืœ ื™ื“ื™ ืคืชืจื•ืŸ DPI ืžื•ื“ืจื ื™ (ื‘ื•ื ื ื™ืงื—, ืœืžืฉืœ, ืืช ืžืขืงื‘ ื”ื˜ื•ืจื ื˜ื™ื ื”ืžืคื•ืจืกื rutracker.nl). ื›ืืฉืจ ืื ื• ืžื ืกื™ื ืœื’ืฉืช ืœืืชืจ ืฉืœ ืขื•ืงื‘ ื˜ื•ืจื ื˜ื™ื, ืื ื• ืจื•ืื™ื ืืช ื”ืกื˜ื‘ ื”ืกื˜ื ื“ืจื˜ื™ ืฉืœ ื”ืกืคืง ื”ืžืฆื™ื™ืŸ ืฉื”ืžืฉืื‘ ื—ืกื•ื:

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื‘ืืชืจ RKN ื”ื“ื•ืžื™ื™ืŸ ื”ื–ื” ืจืฉื•ื ืœืžืขืฉื” ื‘ืจืฉื™ืžื•ืช ื”ืขืฆื™ืจื”:

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื›ืืฉืจ ืืชื” ืฉื•ืืœ whois, ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืฉื”ื“ื•ืžื™ื™ืŸ ืขืฆืžื• "ืžื•ืกืชืจ" ืžืื—ื•ืจื™ ืกืคืง ื”ืขื ืŸ Cloudflare.

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ืื‘ืœ ื‘ื ื™ื’ื•ื“ ืœ"ืžื•ืžื—ื™ื" ืž-RKN, ืขื•ื‘ื“ื™ื ื‘ืขืœื™ ื™ื“ืข ื˜ื›ื ื™ ื™ื•ืชืจ ืž-Beeline (ืื• ืœื™ืžื“ื• ืขืœ ื™ื“ื™ ื”ื ื™ืกื™ื•ืŸ ื”ืžืจ ืฉืœ ื”ืจื’ื•ืœื˜ื•ืจ ื”ืžืคื•ืจืกื ืฉืœื ื•) ืœื ืืกืจื• ื‘ื˜ื™ืคืฉื•ืช ืืช ื”ืืชืจ ืœืคื™ ื›ืชื•ื‘ืช IP, ืืœื ื”ื•ืกื™ืคื• ืืช ืฉื ื”ื“ื•ืžื™ื™ืŸ ืœืจืฉื™ืžืช ื”ืขืฆื™ืจื”. ืืชื” ื™ื›ื•ืœ ืœืืžืช ื–ืืช ื‘ืงืœื•ืช ืื ืืชื” ืžืกืชื›ืœ ืื™ืœื• ื“ื•ืžื™ื™ื ื™ื ืื—ืจื™ื ืžืกืชืชืจื™ื ืžืื—ื•ืจื™ ืื•ืชื” ื›ืชื•ื‘ืช IP, ื‘ืงืจ ื‘ืื—ื“ ืžื”ื ื•ืชืจืื” ืฉื”ื’ื™ืฉื” ืื™ื ื” ื—ืกื•ืžื”:

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ืื™ืš ื–ื” ืงื•ืจื”? ืื™ืš ื”-DPI ืฉืœ ื”ืกืคืง ื™ื•ื“ืข ื‘ืื™ื–ื” ื“ื•ืžื™ื™ืŸ ื ืžืฆื ื”ื“ืคื“ืคืŸ ืฉืœื™, ืžืื—ืจ ืฉื›ืœ ื”ืชืงืฉื•ืจืช ืžืชืจื—ืฉืช ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ https, ื•ืขื“ื™ื™ืŸ ืœื ืฉืžื ื• ืœื‘ ืœื”ื—ืœืคื” ืฉืœ ืชืขื•ื“ื•ืช https ืž-Beeline? ื”ืื ื”ื•ื ื‘ืขืœ ืจืื™ื™ืช ืจื•ื— ืื• ืฉืขื•ืงื‘ื™ื ืื—ืจื™ื™?

ื‘ื•ืื• ื ื ืกื” ืœืขื ื•ืช ืขืœ ืฉืืœื” ื–ื• ืขืœ ื™ื“ื™ ื”ืชื‘ื•ื ื ื•ืช ื‘ืชื ื•ืขื” ื“ืจืš wireshark

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ืฆื™ืœื•ื ื”ืžืกืš ืžืจืื” ืฉืชื—ื™ืœื” ื”ื“ืคื“ืคืŸ ืžืงื‘ืœ ืืช ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืฉืจืช ื‘ืืžืฆืขื•ืช DNS, ืœืื—ืจ ืžื›ืŸ ืžืชืจื—ืฉืช ืœื—ื™ืฆืช ื™ื“ ืจื’ื™ืœื” ืฉืœ TCP ืขื ืฉืจืช ื”ื™ืขื“, ื•ืœืื—ืจ ืžื›ืŸ ื”ื“ืคื“ืคืŸ ืžื ืกื” ืœื™ืฆื•ืจ ื—ื™ื‘ื•ืจ SSL ืขื ื”ืฉืจืช. ืœืฉื ื›ืš, ื”ื•ื ืฉื•ืœื— ื—ื‘ื™ืœืช SSL Client Hello, ื”ืžื›ื™ืœื” ืืช ืฉื ืชื—ื•ื ื”ืžืงื•ืจ ื‘ื˜ืงืกื˜ ื‘ืจื•ืจ. ืฉื“ื” ื–ื” ื ื“ืจืฉ ืขืœ ื™ื“ื™ ืฉืจืช ื”ื—ื–ื™ืช Cloudflare ืขืœ ืžื ืช ืœื ืชื‘ ื ื›ื•ืŸ ืืช ื”ื—ื™ื‘ื•ืจ. ื–ื” ื”ืžืงื•ื ืฉื‘ื• ื”ืกืคืง DPI ืชื•ืคืก ืื•ืชื ื•, ืฉื•ื‘ืจ ืืช ื”ืงืฉืจ ืฉืœื ื•. ื™ื—ื“ ืขื ื–ืืช, ืื ื—ื ื• ืœื ืžืงื‘ืœื™ื ืฉื•ื ื‘ื“ืœ ืžื”ืกืคืง, ื•ืื ื• ืจื•ืื™ื ืืช ืฉื’ื™ืืช ื”ื“ืคื“ืคืŸ ื”ืจื’ื™ืœื” ื›ืื™ืœื• ื”ืืชืจ ืžื•ืฉื‘ืช ืื• ืคืฉื•ื˜ ืœื ืขื•ื‘ื“:

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื›ืขืช ื ืคืขื™ืœ ืืช ืžื ื’ื ื•ืŸ eSNI ื‘ื“ืคื“ืคืŸ, ื›ืคื™ ืฉื ื›ืชื‘ ื‘ื”ื•ืจืื•ืช ืขื‘ื•ืจ Firefox :
ืœืฉื ื›ืš ืื ื• ืคื•ืชื—ื™ื ืืช ื“ืฃ ื”ืชืฆื•ืจื” ืฉืœ Firefox about: config ื•ื”ืคืขืœ ืืช ื”ื”ื’ื“ืจื•ืช ื”ื‘ืื•ืช:

network.trr.mode = 2;
network.trr.uri = https://mozilla.cloudflare-dns.com/dns-query
network.security.esni.enabled = true

ืœืื—ืจ ืžื›ืŸ, ื ื‘ื“ื•ืง ืฉื”ื”ื’ื“ืจื•ืช ืคื•ืขืœื•ืช ื›ื”ืœื›ื” ื‘ืืชืจ cloudflare. ืงืฉืจ ื•ื‘ื•ืื• ื ื ืกื” ืฉื•ื‘ ืืช ื”ื˜ืจื™ืง ืขื ืžืขืงื‘ ื”ื˜ื•ืจื ื˜ื™ื ืฉืœื ื•.

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื•ื•ืืœื”. ื”ื’ืฉืฉ ื”ืื”ื•ื‘ ืขืœื™ื ื• ื ืคืชื— ืœืœื ืฉื•ื ืฉืจืชื™ VPN ืื• ืคืจื•ืงืกื™. ื‘ื•ืื• ื ืกืชื›ืœ ื›ืขืช ืขืœ ืžื–ื‘ืœื” ื‘-wireshark ื›ื“ื™ ืœืจืื•ืช ืžื” ืงืจื”.

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื”ืคืขื, ื—ื‘ื™ืœืช ssl client hello ืื™ื ื” ืžื›ื™ืœื” ื‘ืžืคื•ืจืฉ ืืช ื“ื•ืžื™ื™ืŸ ื”ื™ืขื“, ืืœื ื‘ืžืงื•ื ื–ืืช ื”ื•ืคื™ืข ืฉื“ื” ื—ื“ืฉ ื‘ื—ื‘ื™ืœื” - encrypted_server_name - ื›ืืŸ ื ืžืฆื ื”ืขืจืš ืฉืœ rutracker.nl, ื•ืจืง ืฉืจืช ื”ื—ื–ื™ืช ืฉืœ cloudflare ื™ื›ื•ืœ ืœืคืขื ื— ืืช ื–ื” ืฉื“ื”. ื•ืื ื›ืŸ, ืื– ืœืกืคืง DPI ืื™ืŸ ื‘ืจื™ืจื” ืืœื ืœืฉื˜ื•ืฃ ื™ื“ื™ื™ื ื•ืœืืคืฉืจ ืชืขื‘ื•ืจื” ื›ื–ื•. ืื™ืŸ ืืคืฉืจื•ื™ื•ืช ืื—ืจื•ืช ืขื ื”ืฆืคื ื”.

ืื–, ื‘ื“ืงื ื• ืื™ืš ื”ื˜ื›ื ื•ืœื•ื’ื™ื” ืขื•ื‘ื“ืช ื‘ื“ืคื“ืคืŸ. ืขื›ืฉื™ื• ื‘ื•ืื• ื ื ืกื” ืœื™ื™ืฉื ืืช ื–ื” ืขืœ ื“ื‘ืจื™ื ืกืคืฆื™ืคื™ื™ื ื•ืžืขื ื™ื™ื ื™ื ื™ื•ืชืจ. ื•ืงื•ื“ื ื›ืœ, ื ืœืžื“ ืืช ืื•ืชื• ืชืœืชืœ ืœื”ืฉืชืžืฉ ื‘-eSNI ืœืขื‘ื•ื“ื” ืขื TLS 1.3, ื•ื‘ืžืงื‘ื™ืœ ื ืจืื” ื›ื™ืฆื“ ืคื•ืขืœ ืคืจื•ื ื˜ ื”ืชื—ื•ื ืžื‘ื•ืกืก eSNI ืขืฆืžื•.

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืขื eSNI

ื‘ืฉืœ ื”ืขื•ื‘ื“ื” ืฉ-curl ืžืฉืชืžืฉ ื‘ืกืคืจื™ื™ืช openssl ื”ืจื’ื™ืœื” ื›ื“ื™ ืœื”ืชื—ื‘ืจ ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ https, ืงื•ื“ื ื›ืœ ืขืœื™ื ื• ืœืกืคืง ืฉื ืชืžื™ื›ื” ื‘-eSNI. ืื™ืŸ ืขื“ื™ื™ืŸ ืชืžื™ื›ื” ื‘-eSNI ื‘ืกื ื™ืคื™ ื”ืžืืกื˜ืจ ืฉืœ openssl, ืื– ืขืœื™ื ื• ืœื”ื•ืจื™ื“ ืกื ื™ืฃ ืžื™ื•ื—ื“ ืฉืœ openssl, ืœืงืžืคืœ ื•ืœื”ืชืงื™ืŸ ืื•ืชื•.

ืื ื• ืžืฉื›ืคืœื™ื ืืช ื”ืžืื’ืจ ืž-GitHub ื•ืžืจื›ื™ื‘ื™ื ื›ืจื’ื™ืœ:

$ git clone https://github.com/sftcd/openssl
$ cd openssl
$ ./config

$ make
$ cd esnistuff
$ make

ืœืื—ืจ ืžื›ืŸ, ืื ื• ืžืฉื›ืคืœื™ื ืืช ื”ืžืื’ืจ ืขื curl ื•ืžื’ื“ื™ืจื™ื ืืช ื”ื”ื™ื“ื•ืจ ืฉืœื• ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช openssl ื”ืžื”ื™ื“ื•ืจ ืฉืœื ื•:

$ cd $HOME/code
$ git clone https://github.com/niallor/curl.git curl-esni
$ cd curl-esni

$ export LD_LIBRARY_PATH=/opt/openssl
$ ./buildconf
$ LDFLAGS="-L/opt/openssl" ./configure --with-ssl=/opt/openssl --enable-esni --enable-debug

ื›ืืŸ ื—ืฉื•ื‘ ืœืฆื™ื™ืŸ ื ื›ื•ืŸ ืืช ื›ืœ ื”ืกืคืจื™ื•ืช ืฉื‘ื”ืŸ ื ืžืฆื openssl (ื‘ืžืงืจื” ืฉืœื ื•, ื–ื” /opt/openssl/) ื•ืœื•ื•ื“ื ืฉืชื”ืœื™ืš ื”ื”ื’ื“ืจื” ื™ืขื‘ื•ืจ ืœืœื ืฉื’ื™ืื•ืช.

ืื ื”ื”ื’ื“ืจื” ืชืฆืœื™ื—, ื ืจืื” ืืช ื”ืฉื•ืจื”:

ืื–ื”ืจื”: esni ESNI ืžื•ืคืขืœ ืืš ืžืกื•ืžืŸ ื ื™ืกื™ื•ื ื™. ื”ืฉืชืžืฉ ื‘ื–ื”ื™ืจื•ืช!

$ make

ืœืื—ืจ ื‘ื ื™ื™ืช ื”ื—ื‘ื™ืœื” ื‘ื”ืฆืœื—ื”, ื ืฉืชืžืฉ ื‘ืงื•ื‘ืฅ bash ืžื™ื•ื—ื“ ืž-openssl ื›ื“ื™ ืœื”ื’ื“ื™ืจ ื•ืœื”ืคืขื™ืœ ืืช curl. ื‘ื•ืื• ื ืขืชื™ืง ืื•ืชื• ืœืกืคืจื™ื™ื” ืขื ืกืœืกื•ืœ ืœื ื•ื—ื•ืช:

cp /opt/openssl/esnistuff/curl-esni 

ื•ืœื‘ืฆืข ื‘ืงืฉืช https ืœื‘ื“ื™ืงื” ืœืฉืจืช cloudflare, ืชื•ืš ื”ืงืœื˜ืช ืžื ื•ืช DNS ื•-TLS ื‘ื•-ื–ืžื ื™ืช ื‘-Wireshark.

$ ESNI_COVER="www.hello-rkn.ru" ./curl-esni https://cloudflare.com/

ื‘ืชื’ื•ื‘ืช ื”ืฉืจืช, ื‘ื ื•ืกืฃ ืœืžื™ื“ืข ืจื‘ ืขืœ ื ื™ืคื•ื™ ื‘ืื’ื™ื ืž-openssl ื•-curl, ื ืงื‘ืœ ืชื’ื•ื‘ืช HTTP ืขื ืงื•ื“ 301 ืž-cloudflare.

HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 13:12:55 GMT
< Transfer-Encoding: chunked
< Connection: keep-alive
< Cache-Control: max-age=3600
< Expires: Sun, 03 Nov 2019 14:12:55 GMT
< Location: https://www.cloudflare.com/

ืžื” ืฉืžืฆื‘ื™ืข ืขืœ ื›ืš ืฉื”ื‘ืงืฉื” ืฉืœื ื• ื ืžืกืจื” ื‘ื”ืฆืœื—ื” ืœืฉืจืช ื”ื™ืขื“, ื ืฉืžืขื” ื•ืขื•ื‘ื“ื”.

ืขื›ืฉื™ื• ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืžื–ื‘ืœื” ื”ืชื ื•ืขื” ื‘-wireshark, ื›ืœื•ืžืจ. ืžื” ืฉืจืื” ื”ืกืคืง DPI ื‘ืžืงืจื” ื–ื”.

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื ื™ืชืŸ ืœืจืื•ืช ืฉ-curl ืคื ื” ืชื—ื™ืœื” ืœืฉืจืช ื”-DNS ืœืงื‘ืœืช ืžืคืชื— eSNI ืฆื™ื‘ื•ืจื™ ืขื‘ื•ืจ ืฉืจืช cloudflare - ื‘ืงืฉืช TXT DNS ืœ-_esni.cloudflare.com (ื—ื‘ื™ืœื” ืžืก' 13). ืœืื—ืจ ืžื›ืŸ, ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ืช openssl, curl ืฉืœื— ื‘ืงืฉืช TLS 1.3 ืœืฉืจืช cloudflare ื‘ื” ื”ื•ืฆืคืŸ ืฉื“ื” ื”-SNI ืขื ื”ืžืคืชื— ื”ืฆื™ื‘ื•ืจื™ ืฉื”ื•ืฉื’ ื‘ืฉืœื‘ ื”ืงื•ื“ื (ื—ื‘ื™ืœื” ืžืก' 22). ืื‘ืœ, ื‘ื ื•ืกืฃ ืœืฉื“ื” eSNI, ื—ื‘ื™ืœืช SSL-hello ื›ืœืœื” ื’ื ืฉื“ื” ืขื ื”-SNI ื”ืจื’ื™ืœ - ืคืชื•ื—, ืื•ืชื• ื ื•ื›ืœ ืœืฆื™ื™ืŸ ื‘ื›ืœ ืกื“ืจ (ื‘ืžืงืจื” ื–ื” - www.hello-rkn.ru).

ืฉื“ื” SNI ืคืชื•ื— ื–ื” ืœื ื ืœืงื— ื‘ื—ืฉื‘ื•ืŸ ื‘ืฉื•ื ืฆื•ืจื” ื‘ืขืช ืขื™ื‘ื•ื“ ืขืœ ื™ื“ื™ ืฉืจืชื™ cloudflare ื•ืจืง ืฉื™ืžืฉ ื›ืžืกื™ื›ื” ืขื‘ื•ืจ ื”ืกืคืง DPI. ืฉืจืช cloudflare ืงื™ื‘ืœ ืืช ื—ื‘ื™ืœืช ื”-ssl-hello ืฉืœื ื•, ืคืขื ื— ืืช ื”-eSNI, ื—ื™ืœืฅ ืžืฉื ืืช ื”-SNI ื”ืžืงื•ืจื™ ื•ืขื™ื‘ื“ ืื•ืชื• ื›ืื™ืœื• ื›ืœื•ื ืœื ืงืจื” (ื”ื•ื ืขืฉื” ื”ื›ืœ ื‘ื“ื™ื•ืง ื›ืคื™ ืฉืชื•ื›ื ืŸ ื‘ืขืช โ€‹โ€‹ืคื™ืชื•ื— eSNI).

ื”ื“ื‘ืจ ื”ื™ื—ื™ื“ ืฉื ื™ืชืŸ ืœืชืคื•ืก ื‘ืžืงืจื” ื–ื” ืžื ืงื•ื“ืช ืžื‘ื˜ ืฉืœ DPI ื”ื•ื ื‘ืงืฉืช ื”-DNS ื”ืขื™ืงืจื™ืช ืืœ _esni.cloudflare.com. ืื‘ืœ ื”ืคื›ื ื• ืืช ื‘ืงืฉืช ื”-DNS ืจืง ื›ื“ื™ ืœื”ืจืื•ืช ืื™ืš ื”ืžื ื’ื ื•ืŸ ื”ื–ื” ืคื•ืขืœ ืžื‘ืคื ื™ื.

ื›ื“ื™ ืœืฉืœื•ืฃ ืกื•ืฃ ืกื•ืฃ ืืช ื”ืฉื˜ื™ื— ืžืชื—ืช ืœ-DPI, ืื ื• ืžืฉืชืžืฉื™ื ื‘ืžื ื’ื ื•ืŸ DNS-over-HTTPS ืฉื”ื•ื–ื›ืจ ื›ื‘ืจ. ื”ืกื‘ืจ ืงื˜ืŸ - DOH ื”ื•ื ืคืจื•ื˜ื•ืงื•ืœ ื”ืžืืคืฉืจ ืœื”ื’ืŸ ืžืคื ื™ ื”ืชืงืคื” ืฉืœ man-in-the-middle ืขืœ ื™ื“ื™ ืฉืœื™ื—ืช ื‘ืงืฉืช DNS ื“ืจืš HTTPS.

ื‘ื•ื ื ื‘ืฆืข ืืช ื”ื‘ืงืฉื” ืฉื•ื‘, ืื‘ืœ ื”ืคืขื ื ืงื‘ืœ ืžืคืชื—ื•ืช eSNI ืฆื™ื‘ื•ืจื™ื™ื ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ https, ืœื DNS:

ESNI_COVER="www.hello-rkn.ru" DOH_URL=https://mozilla.cloudflare-dns.com/dns-query ./curl-esni https://cloudflare.com/

dump ืชืขื‘ื•ืจืช ื”ื‘ืงืฉื” ืžื•ืฆื’ ื‘ืฆื™ืœื•ื ื”ืžืกืš ืœืžื˜ื”:

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื ื™ืชืŸ ืœืจืื•ืช ื›ื™ curl ื ื™ื’ืฉ ืชื—ื™ืœื” ืœืฉืจืช mozilla.cloudflare-dns.com ื‘ืืžืฆืขื•ืช ืคืจื•ื˜ื•ืงื•ืœ DoH (ื—ื™ื‘ื•ืจ https ืœืฉืจืช 104.16.249.249) ื›ื“ื™ ืœืงื‘ืœ ืžื”ื ืืช ืขืจื›ื™ ื”ืžืคืชื—ื•ืช ื”ืฆื™ื‘ื•ืจื™ื™ื ืœื”ืฆืคื ืช SNI, ื•ืœืื—ืจ ืžื›ืŸ ืืœ ื”ื™ืขื“ ืฉืจืช, ืžืกืชืชืจ ืžืื—ื•ืจื™ ื”ื“ื•ืžื™ื™ืŸ www.hello-rkn.ru.

ื‘ื ื•ืกืฃ ืœืคืชืจื•ืŸ DoH ื”ื "ืœ mozilla.cloudflare-dns.com, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืฉื™ืจื•ืชื™ DoH ืคื•ืคื•ืœืจื™ื™ื ืื—ืจื™ื, ืœืžืฉืœ, ืžืชืื’ื™ื“ ื”ืจืฉืข ื”ืžืคื•ืจืกื.
ื‘ื•ื ื ืจื™ืฅ ืืช ื”ืฉืื™ืœืชื” ื”ื‘ืื”:

ESNI_COVER="www.kremlin.ru" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/

ื•ื ืงื‘ืœ ืืช ื”ืชืฉื•ื‘ื”:

< HTTP/1.1 301 Moved Permanently
< Date: Sun, 03 Nov 2019 14:10:22 GMT
< Content-Type: text/html
< Transfer-Encoding: chunked
< Connection: keep-alive
< Set-Cookie: __cfduid=da0144d982437e77b0b37af7d00438b1a1572790222; expires=Mon, 02-Nov-20 14:10:22 GMT; path=/; domain=.rutracker.nl; HttpOnly; Secure
< Location: https://rutracker.nl/forum/index.php
< CF-Cache-Status: DYNAMIC
< Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
< Server: cloudflare
< CF-RAY: 52feee696f42d891-CPH

ื—ื–ื™ืช ื“ื•ืžื™ื™ืŸ ืžื‘ื•ืกืกืช ืขืœ TLS 1.3

ื‘ืžืงืจื” ื–ื”, ืคื ื™ื ื• ืœืฉืจืช rutracker.nl ื”ื—ืกื•ื, ื‘ืืžืฆืขื•ืช ื”-DoH resolver dns.google (ืื™ืŸ ื›ืืŸ ืฉื’ื™ืืช ื”ืงืœื“ื”, ื›ืขืช ืœืชืื’ื™ื“ ื”ืžืคื•ืจืกื ื™ืฉ ื“ื•ืžื™ื™ืŸ ื‘ืจืžื” ืจืืฉื•ื ื” ืžืฉืœื•) ื•ื›ื™ืกื™ื ื• ืืช ืขืฆืžื ื• ื‘ื“ื•ืžื™ื™ืŸ ืื—ืจ, ืฉื”ื•ื ื‘ื”ื—ืœื˜ ืืกื•ืจ ืœื›ืœ DPI ืœื—ืกื•ื ืชื—ืช ื›ืื‘ ืžื•ื•ืช. ื‘ื”ืชื‘ืกืก ืขืœ ื”ืชื’ื•ื‘ื” ืฉื”ืชืงื‘ืœื”, ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื™ืŸ ืฉื”ื‘ืงืฉื” ืฉืœื ื• ื˜ื•ืคืœื” ื‘ื”ืฆืœื—ื”.

ื›ื‘ื“ื™ืงื” ื ื•ืกืคืช ืœื›ืš ืฉื”-DPI ืฉืœ ื”ืกืคืง ืžื’ื™ื‘ ืœ-SNI ื”ืคืชื•ื—, ืฉืื ื• ืžืฉื“ืจื™ื ื›ื›ื™ืกื•ื™, ืื ื• ื™ื›ื•ืœื™ื ืœื”ื’ื™ืฉ ื‘ืงืฉื” ืœ-rutracker.nl ื‘ืžืกื•ื•ื” ืฉืœ ืžืฉืื‘ ืืกื•ืจ ืื—ืจ, ืœืžืฉืœ, ืขื•ืงื‘ ืื—ืจ ื˜ื•ืจื ื˜ื™ื "ื˜ื•ื‘":

$ ESNI_COVER="rutor.info" DOH_URL=https://dns.google/dns-query ./curl-esni https://rutracker.nl/

ืœื ื ืงื‘ืœ ืชื’ื•ื‘ื” ืžื”ืฉืจืช, ื›ื™... ื”ื‘ืงืฉื” ืฉืœื ื• ืชื™ื—ืกื ืขืœ ื™ื“ื™ ืžืขืจื›ืช DPI.

ืกื™ื›ื•ื ืงืฆืจ ืœื—ืœืง ื”ืจืืฉื•ืŸ

ืื– ื”ืฆืœื—ื ื• ืœื”ื“ื’ื™ื ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ eSNI ื‘ืืžืฆืขื•ืช openssl ื•-curl ื•ืœื‘ื“ื•ืง ืืช ืคืขื•ืœืช ื”ื—ื–ื™ืช ื”ื“ื•ืžื™ื™ืŸ ืขืœ ื‘ืกื™ืก eSNI. ื‘ืื•ืชื• ืื•ืคืŸ, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืชืื™ื ืืช ื”ื›ืœื™ื ื”ืื”ื•ื‘ื™ื ืขืœื™ื ื• ื”ืžืฉืชืžืฉื™ื ื‘ืกืคืจื™ื™ืช openssl ืœืขื‘ื•ื“ "ื‘ืžืกื•ื•ื”" ืฉืœ ืชื—ื•ืžื™ื ืื—ืจื™ื. ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ื›ืš ื‘ืžืืžืจื™ื ื”ื‘ืื™ื ืฉืœื ื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”