DNS over TLS
デフォルトでは、DNSは平文接続で送信されます。DNS over TLS (DoT) は、DNSクエリを暗号化された接続で送信する方法の一つです。Cloudflareは標準ポート853でDNS over TLSをサポートしており、RFC 7858 ↗に準拠しています。DoTでは、暗号化はトランスポート層で行われ、TCP接続の上にTLS暗号化が追加されます。
Cloudflareは、ポート853で1.1.1.1、1.0.0.1、および対応するIPv6アドレス(2606:4700:4700::1111および2606:4700:4700::1001)でDNS over TLS (DoT)をサポートしています。DoTクライアントがIPアドレスをサポートしていない場合、CloudflareのDoTエンドポイントにはホスト名one.one.one.oneでもアクセスできます。スタブリゾルバ(DNSリゾルバと通信するデバイス上のDNSクライアント)は、TLS接続を介してリゾルバに接続します:
- 接続の前に、DNSスタブリゾルバは
1.1.1.1からのTLS証明書のbase64エンコードされたSHA256ハッシュ(SPKIと呼ばれる)を保存しています。 - DNSスタブリゾルバは
1.1.1.1:853とのTCP接続を確立します。 - DNSスタブリゾルバはTLSハンドシェイクを開始します。
- TLSハンドシェイクで、
1.1.1.1はそのTLS証明書を提示します。 - TLS接続が確立されると、DNSスタブリゾルバは暗号化された接続でDNSを送信でき、盗聴や改ざんを防ぎます。
- TLS接続で送信されるすべてのDNSクエリは、TCPでDNSを送信するための仕様 ↗に準拠する必要があります。
kdig -d @1.1.1.1 +tls-ca +tls-host=one.one.one.one example.com;; DEBUG: owner(example.com.)のクエリ中、class(1)、type(1)、server(1.1.1.1)、port(853)、protocol(TCP);; DEBUG: TLS、138のシステム証明書をインポートしました;; DEBUG: TLS、受信した証明書階層:;; DEBUG: #1, C=US,ST=California,L=San Francisco,O=Cloudflare\, Inc.,CN=cloudflare-dns.com;; DEBUG: SHA-256 PIN: GP8Knf7qBae+aIfythytMbYnL+yowaWVeD6MoLHkVRg=;; DEBUG: #2, C=US,O=DigiCert Inc,CN=DigiCert TLS Hybrid ECC SHA384 2020 CA1;; DEBUG: SHA-256 PIN: e0IRz5Tio3GA1Xs4fUVWmH1xHDiH2dMbVtCBSkOIdqM=;; DEBUG: TLS、証明書PINチェックをスキップします;; DEBUG: TLS、証明書は信頼されています。;; TLSセッション (TLS1.3)-(ECDHE-X25519)-(ECDSA-SECP256R1-SHA256)-(AES-256-GCM);; ->>HEADER<<- opcode: QUERY; status: NOERROR; id: 3395;; Flags: qr rd ra; QUERY: 1; ANSWER: 1; AUTHORITY: 0; ADDITIONAL: 1
;; EDNS PSEUDOSECTION:;; Version: 0; flags: ; UDP size: 1232 B; ext-rcode: NOERROR;; PADDING: 408 B
;; QUESTION SECTION:;; example.com. IN A
;; ANSWER SECTION:example.com. 75897 IN A 93.184.216.34
;; 受信したバイト数 468 B;; 時間 2023-06-23 18:05:42 PDT;; 1.1.1.1@853(TCP)から12.1 msでCloudflareのDNS over TLSは、TLS 1.3およびTLS 1.2をサポートしています。