shiichan

まさかの破壊的変更!1.1.1.1 の DoH JSON API でレコード表示が様変わり!

こんにちは、しぃちゃんだよ!今日は Cloudflare の 1.1.1.1 まわりのアップデートを見つけたから紹介するね!

Cloudflare Changelog developers.cloudflare.com

なにが発表されたの?

Cloudflare Changelog で、1.1.1.1 が提供する DoH JSON API(application/dns-json)のレスポンス形式が更新されることが発表されたよ。ロールアウト中は新旧どちらの形式のレスポンスも返ってくる可能性があるみたい。

記事にはこう書かれているの。

These are breaking changes. The DoH JSON format has no formal RFC and its schema is not guaranteed to be stable.

つまり正式な RFC がないフォーマットだからこそ、Cloudflare の判断で仕様を変えられる、ということなんだね。

今までどうだったの?

今まで、CAA・NAPTR・RP・IPSECKEY・SVCB・HTTPS・TLSA・SSHFP・OPENPGPKEY といったレコードタイプは、data フィールドが RFC 3597 のジェネリック 16 進数エンコーディング(\# {length} {hex} の形)で返ってきていたの。人間が見てもよく分からない、ただのバイト列だったんだよ。

DNSSEC 関連の RRSIG・DS・CDS・DNSKEY・CDNSKEY も、アルゴリズムは RSASHA256 のようなニーモニック名(文字列)で表示されていたの。

これで何が変わるの?

今回の更新で、対象のレコードタイプは人間にも読みやすい標準プレゼンテーション形式で返ってくるようになるよ。これまで意味不明な 16 進数を自前でデコードしていた開発者は、その処理が要らなくなるってこと!

一方で、DNSSEC のアルゴリズムはニーモニック名から数字の識別子に変わるから、こっちは逆に「文字列比較で RSASHA256 を見ていたコード」が動かなくなる可能性があるよ。DoH JSON API を使っているクライアントやツールは、パース処理の見直しが必要かもしれないの。

深く潜ってみよう

新しい表示形式の例はこんな感じだよ。

CAA: 0 issue "letsencrypt.org"
NAPTR: 100 10 "s" "SIP+D2U" "" _sip._udp.example.com.
RP: admin.example.com. txt.example.com.
IPSECKEY: 10 1 2 192.0.2.1 AwEA...
SVCB: 1 target.example.com. alpn=h2
HTTPS: 1 . alpn=h3,h2 ipv4hint=192.0.2.1
TLSA: 3 1 1 aabbccdd...
SSHFP: 1 2 aabbccdd...
OPENPGPKEY: AwEA...

DNSSEC のアルゴリズム識別子は RFC 4034 に基づく数字になるよ。たとえば RSASHA2568ECDSAP256SHA25613ED2551915 になるの。DS のダイジェストタイプも SHA-2562 になるよ。

変更前: RRSIG: A RSASHA256 2 300 ...
変更後: RRSIG: A 8 2 300 ...

変更前: DS: 12345 RSASHA256 SHA-256 aabb...
変更後: DS: 12345 8 2 aabb...

変更前: DNSKEY: 257 3 RSASHA256 AwEA...
変更後: DNSKEY: 257 3 8 AwEA...

そのほか、HINFO の character-string も個別にクォートされる形式に変わるみたいだよ。

もし「絶対に壊れてほしくない」用途なら、DoH JSON API じゃなくて DoH wireformat(バイナリ形式)を使うのがおすすめ、と記事内でも案内されているよ。JSON API はそもそも正式な RFC のないフォーマットだから、今後も仕様変更の可能性がある、ということだね。

まとめ

  • 1.1.1.1 の DoH JSON API で、CAA・TLSA・SVCB・HTTPS など複数のレコードタイプが読みやすい表示形式になった
  • DNSSEC 関連レコードのアルゴリズムは、ニーモニック名から RFC 4034 の数字識別子に変わった
  • ロールアウト中は新旧の形式が混在する可能性があるので注意
  • 安定したフォーマットが必要なら DoH wireformat を使うのが安心
  • 1.1.1.1 の DoH JSON API をパースしているツールやクライアントを作っている人は、ぜひ一度パース処理を見直してみてね。