BLOGサブスレッドの日常

2022.02.08

ワイルドカードドメインの罠

tama

tama です。
最近社内(というか取引先)でハマったトラブルがあったと聞いて検証してみました。

ストーリー

  1. 対象ドメインにはワイルドカードが指定されていました
    • 例:*.wildcard.tes.to. IN CNAME hoge.ap-northeast-1.elb.amazonaws.com.
      • (これが設定されていた経緯はわかりません…)
  2. SSL対応の ssl.wildcard.tes.to をACMで証明書管理することになりました
  3. DNS検証のため _hash.ssl.wildcard.tes.to. IN CNAME fuga.acm-validations.aws. を設定しました
  4. ssl.wildcard.tes.to にアクセスできなくなってしまいました

設定別検索結果

ワイルドカードだけのとき(1.のとき)

*.wildcard.tes.to.          IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.

という設定により、.wildcard.tes.to で終わるすべてのドメイン名が hoge.ap-northeast-1.elb.amazonaws.com に解決されます。

$ nslookup - localhost
> ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

ssl.wildcard.tes.to canonical name = hoge.ap-northeast-1.elb.amazonaws.com.
> hoge.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

hoge.wildcard.tes.to    canonical name = hoge.ap-northeast-1.elb.amazonaws.com.

サブドメインのサブドメインを設定したとき(3.のとき)

*.wildcard.tes.to.          IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.
_hash.ssl.wildcard.tes.to.  IN CNAME    fuga.acm-validations.aws.

この設定になると、ssl.wildcard.tes.to は特別扱いされることになります。
ssl.wildcard.tes.to にワイルドカードを適用すると _hash.ssl.wildcard.tes.to の設定が機能しなくなってしまうためではないかと考えています。

$ nslookup - localhost
> hoge.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

hoge.wildcard.tes.to    canonical name = hoge.ap-northeast-1.elb.amazonaws.com.
> _hash.ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

_hash.ssl.wildcard.tes.to   canonical name = fuga.acm-validations.aws.
> ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

*** Can't find ssl.wildcard.tes.to.: No answer

対策

ssl.wildcard.tes.to の設定を明示的に追加してやればいけそうです。

*.wildcard.tes.to.          IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.
_hash.ssl.wildcard.tes.to.  IN CNAME    fuga.acm-validations.aws.
ssl.wildcard.tes.to.        IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.

$ nslookup - localhost
> hoge.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

hoge.wildcard.tes.to    canonical name = hoge.ap-northeast-1.elb.amazonaws.com.
> _hash.ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

_hash.ssl.wildcard.tes.to   canonical name = fuga.acm-validations.aws.
> ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

ssl.wildcard.tes.to canonical name = hoge.ap-northeast-1.elb.amazonaws.com.

さらに(そんなケースがあるとしたら)*.ssl.wildcard.tes.to も設定してやれば、ssl のサブドメインも対応できます。

*.wildcard.tes.to.          IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.
_hash.ssl.wildcard.tes.to.  IN CNAME    fuga.acm-validations.aws.
ssl.wildcard.tes.to.        IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.
*.ssl.wildcard.tes.to.      IN CNAME    hoge.ap-northeast-1.elb.amazonaws.com.

$ nslookup - localhost
> hoge.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

hoge.wildcard.tes.to    canonical name = hoge.ap-northeast-1.elb.amazonaws.com.
> _hash.ssl.wildcard.tes.to. 
Server:     localhost
Address:    ::1#53

_hash.ssl.wildcard.tes.to   canonical name = fuga.acm-validations.aws.
> ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

ssl.wildcard.tes.to canonical name = hoge.ap-northeast-1.elb.amazonaws.com.
> hage.ssl.wildcard.tes.to.
Server:     localhost
Address:    ::1#53

hage.ssl.wildcard.tes.to    canonical name = hoge.ap-northeast-1.elb.amazonaws.com.

感想

*.wildcard の設定だけであれば ssl.wildcard も名前解決できるのに、
_hash.ssl.wildcard の設定を加えると ssl.wildcard が仲間外れになるの、うっかりするとハマりそうですね。
ssl.wildcard にワイルドカードを適用すると _hash.ssl.wildcard が解決できなくなるから、という考察は理に適ってるのかなと思います。

「ワイルドカードは無くす方向の提案したいお気持ち」
ゴモットモ

参考

この記事を書いた人

tama