HTTPSで接続するための追加情報を格納するHTTPSSVCレコード

2020/07/19 追記
仕様に幾つかの変更があったため、新しく記事を書き直しました
asnokaze.hatenablog.com



HTTPSで接続する際に以下の情報を持っていると都合がよいです

  • SNIを暗号化するESNIの鍵情報など情報、(通常ESNI DNSレコードに記述される)
  • HTTP/2やHTTP/3で通信可能な事を示すAlt-Svc (通常、HTTPレスポンスヘッダやAlt-Svcフレーム、Alt-Svcレコードで提供される)

それらの情報を通知するのに、DNSに新しくHTTPSSVCレコードを追加する「HTTPSSVC service location and parameter specification via the DNS」という提案仕様がGoogleAkamaiの方の共著で提出されています。

また、このHTTPSSVCレコードではドメインのApexでも使用できるためApexでCNAME使いえない問題も解決できるほか、HTTP Strict Transport Security [HSTS] をクライアントに通知できるので初回接続のセキュリティーを改善します。

拡張可能でもあるため、今後もこのレコードに機能を追加することもできます。

HTTPSSVC レコードの利用例です。

 example.com.      2H  IN HTTPSSVC 0 0 svc.example.net.
 svc.example.net.  2H  IN HTTPSSVC 1 2 svc3.example.net. "hq=\":8003\" \
                                    esnikeys=\"...\""
 svc.example.net.  2H  IN HTTPSSVC 1 3 svc2.example.net. "h2=\":8002\" \
                                    esnikeys=\"...\""
  • example.comsvc.example.netからも提供できることを示します。
  • svc3.example.netからHTTP/3を8003ポートで提供できることを示します(また必要なesnikeysを示します)
  • svc2.example.netからHTTP/2を8002ポートで提供できることを示します(また必要なesnikeysを示します)

HTTPSSVCレコードは存在自体がHSTSを示すので、クライアントはHTTPのリンクもHTTPSで接続しに行きます。

フォーマット

HTTPSSVCは、2つの数字がまずならびます。

仕様では、拡張としてesnikeysでESNI用の鍵も付与できるようになっています。