WEBサイトの製作、管理、とかの日記ブログです。

<<   2018年09月   >>
SunMonTueWedThuFriSat
      1
2345678
9101112131415
16171819202122
23242526272829
30      
新着記事
カテゴリ
過去ログ
コメント
検索
ワイルドカードの証明書もやってみた
PPAリポジトリのcertbot入れてワイルドカードの証明書もやってみた。

やりたかったサイトは、
自前DNS使ってるがプライマリは公開しないで借りてるセカンダリDNSで引かせる感じにしてるんで難しいかと思ったが、
bindって同じドメインを複数のzoneに分けることってできるのね。

example.com のゾーンに _acme-challenge.example.com のNSレコードを設定する。
_acme-challenge.example.com のゾーンを作成する。
ってすると、 _acme-challenge.example.comの問い合わせの時は _acme-challenge.example.com のゾーンで応答してくれる。

セカンダリは要らないので allow-update は要らない。
certbotが書き換えるのでallow-updateが必要。
_は本来ドメイン名に認められてない文字なので check-names ignore が必要。
zone "_acme-challenge.example.com" {
    type master;
    file "/etc/bind/_acme-challenge.example.com";
    allow-update {
        127.0.0.1;
    };
    check-names ignore;
};
ゾーン設定はこんな感じ。
ゾーン名が完全一致しないと優先されないぽい?
最初 ns0.example.com みたいにしたらうまく行かなかった。
まあ、かなりハマったんだがDNSは即時反映しなかったりでわかりにくい。

_acme-challenge.example.com IN SOA ns0.example.com. webmaster.example.com. (
                108        ; serial
                86400      ; refresh (1 day)
                3600       ; retry (1 hour)
                86400      ; expire (1 day)
                60         ; minimum (1 minute)
                )
            NS    ns0.example.com.
ゾーンファイルの方はNSレコードだけ設定する。

これで、_acme-challenge.example.comのNSレコードを引いた時に返ってくるまで待つ。


一番ハマったのがnsupdateコマンドでの変更。
nsupdateコマンドでbindの書き換えを行う時、/etc/bind のパーミッションがないとかで怒られる。
で、このパーミッションは普通のパーミッションじゃなくてapparmorってので設定されてた。
/etc/apparmor.d/usr.sbin.named を確認して、
/etc/bind/** r,
となってるので、
/etc/bind/** rw,
にしたら更新できた。


/etc/letsencrypt/dns-01-auth.sh
#!/bin/sh

# dns-01 is VALIDATION set, TOKEN not set
[ "$CERTBOT_VALIDATION" = "" ] && exit 0
[ "$CERTBOT_TOKEN"     != "" ] && exit 0

echo    "delete _acme-challenge.$CERTBOT_DOMAIN TXT\n"\
    "add    _acme-challenge.$CERTBOT_DOMAIN 10 IN TXT \"$CERTBOT_VALIDATION\"\n" | nsupdate -l
更新用スクリプトと

/etc/letsencrypt/dns-01-clean.sh
#!/bin/sh
[ "$CERTBOT_VALIDATION" = "" ] && exit 0
[ "$CERTBOT_TOKEN"     != "" ] && exit 0

echo "delete _acme-challenge.$CERTBOT_DOMAIN TXT\n" | nsupdate -l
クリーン用スクリプトを作成。
両方共実行権限をつけておく。


sudo certbot certonly -d example.com -d *.example.com -m webmaster@example.com --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory --manual --manual-auth-hook /etc/letsencrypt/dns-01-auth.sh --manual-cleanup-hook /etc/letsencrypt/dns-01-clean.sh
を実行する。
1回[Y/N]を聞かれるのでYして、エラーが出るか作成された証明書のパスが出力される。

2回目以降は、
sudo certbot renew
で更新されるぽい。

この記事へのコメント
他の管理ドメインは自前DNSやってないので全部レジストラのDNS使ってるのだが、
NSレコードで_acme-challengeだけ(サブドメインだけ)自前サーバーに向けちゃえばhttpdの管理権限があるサーバー用ならワイルドカード使えるね。

と思ったのだが、レジストラの無料DNSってNSレコード設定できないところが多いね・・・
お名前.com
ムームードメイン
バリュードメイン
スタードメイン
FC2ドメイン
を確認してみたが、対応してるのお名前.comだけね。
あと、今知った(忘れてたかも)がバリュードメインは他社管理ドメインでもDNS利用できるのね。
バリュードメインのDNSでNSレコード使えれば最強だったな・・・

ドメインは安いとこ探して管理してるから、今はムームーとFC2使ってる。
両方共NSレコードはないわけだが、
外部の無料DNSでNSレコード設定できるところ無いか探したが、
ドメイン数が限定されるが、さくらのVPSで利用できる無料DNSサービスがNSレコード設定できそうな感じ。
さくらのDNSサービスはセカンダリDNS以外に興味なかったがLet's Encrypt目的で使えそうだ。
管理人 2018-08-10 02:50:22
ちょうどさくらのVPSに向けるドメインでやりたいわけだし。
管理人 2018-08-10 02:50:52
あと、1個メール専用に使ってたドメインのネームサーバーが移管の後に変更し忘れてたみたいで無効になってたw
Let's Encrypt不要なドメインはバリュードメインのDNS使うようにしちゃえば移管してもOKだしバリュードメインのDNS使うかな。
管理人 2018-08-10 02:53:29
バリュードメインのDNS使おうと思ったら
昔の設定が1個あったわw
他社ドメインで使えるの知ってたけど忘れてたんだね。
管理人 2018-08-10 03:43:36
バリュードメインのDNSは
他社サーバー上でのみ運用するドメインの設定はできません。
の記載があるな。
MXだけでも良いよね。
管理人 2018-08-10 03:46:18
1個バリュードメインのDNS使おうとしてるところだが、
NSレコード設定できるわ。
ここ最強じゃん。

すでに1個さくらに向けちゃった・・・
管理人 2018-08-10 03:52:07
バリュードメインのDNSサーバー応答しない・・・
pingすら通らんw
管理人 2018-08-10 04:13:37
と思ったが、応答きた。
ICMP閉じてんのね。
ムームーのDNSもpingとおらんかった
管理人 2018-08-10 04:15:08
ns1.value-domain.comからns5.value-domain.com
までで運用するって記載されてるけど、
NSレコードに設定されるのは1と2までぽい?
ns6まで応答返ってきた。
管理人 2018-08-10 04:26:26
/etc/bindのパーミッションは
apparmorの設定とファイルシステムのグループ権限にwも必要ぽい
管理人 2018-08-12 21:30:00
名前:
URL
コメント:
この記事へのトラックバック :
whblog 1.7