HTTPSで通信を開始する際に、事前に知っていると有用な情報が幾つかあります。
このような情報を提供する新しいDNSレコードを定義する仕様が提案されています。提案仕様「Service binding and parameter specification via the DNS (DNS SVCB and HTTPS RRs)」では、サービスに関する情報を通知する一般形式であるSVCBレコードと、HTTPS用であるHTTPSレコードを定義しています。
もともとはHTTPSSVCレコードという名称でしたが、最近改称されHTTPSレコードになりました。
また、このHTTPSレコードを用いることでANAMEレコードが解決しようとしていた、APEXを別のレコードに飛ばすことも可能です。
簡単に紹介していきます。
実装状況
Chromeがすでに実装を開始しています
また、CloudFlareではすでに、このHTTPSレコードを返すようになっています (レコードタイプ 65)。下記はうまくデコード出来てませんが、HTTP3のドラフト版対応を通知してます。
$ dig blog.cloudflare.com type65 +short ;; ANSWER SECTION: blog.cloudflare.com. 294 IN TYPE65 \# 76 000100000100150568332D32390568332D32380568332D3237026832 0004000868121A2E68121B2E00060020260647000000000000000000 68121A2E26064700000000000000000068121B2E
概略
HTTPSは下記のような形式をしています。
Name TTL IN HTTPS SvcPriority TargetName SvcParams
具体例を見ていきましょう
pool 7200 IN HTTPS 1 h3pool alpn=h2,h3 port="443" echconfig="123..." HTTPS 2 . alpn=h2 echconfig="abc..." pool 300 IN A 192.0.2.2 AAAA 2001:db8::2 h3pool 300 IN A 192.0.2.3 AAAA 2001:db8::3
HTTPSレコードの中身の最初の値は優先度で、異なる優先度でHTTP/3用とHTTP/2用のレコードがあります。
1つ目のHTTPSレコードは、TargetNameとしてh3poolという指定してきます。このe3poolのエンドポイントが、poolサブドメインのalternative endpointとして動作させる事ができます (RFC7838 HTTP Alternative Services 参照)
SvcParamsとして、使用するポート番号、HTTP/2やHTTP/3に対応していることを示すalpnの識別子、TLS Encrypted Client Helloの情報を付加しています。
また、HTTPSレコードを使用しているだけで、このドメインに対してHTTP Strict Transport Security(HSTS)が適応されます。