目的と背景
certbot のワイルドカードについて
2018 年からCertbotのワイルドカード発行が可能になっている。
ワイルドカードを使うことで、サブドメインをまるっとTLS化できて便利。
ワイルドカードの証明書の作り方
ワイルドカードのやりかたは以前書きました。 http://takuya-1st.hatenablog.jp/entry/2018/10/25/163040
前回、作成した証明書から90日くらい経過して、更新が必要になったので、さらなる進化を目指します。
今回やること:DNSのTXT認証の省力化
ワイルドカード証明書の発行には、TXTレコードの書き換えが必要です。
これを各API経由で自動化することができます。
準備するもの
今回は、これに加えDebianのAPTのCertbotと競合しないようにVirtualEnvを使うことにしました。
準備
最新版のCertbotを持ってきます。
git clone https://github.com/certbot/certbot cd certbot
virtualenv 環境に入ります。
virtualenv certbot-test source ./certbot-test/bin/activate
もしvirtualenv がない場合は pip でインストールします。 pip install --upgrade pip && pip install virtualenv
わたしは pyenv 環境で作っているのでpyenv コマンドとvirtualenvを使っています。
acme をインストール
cd acme python setup.py install cd ..
certbot をインストール
cd certbot python setup.py install cd ..
dns プラグインをインストール。今回は cloudflare を採用します。
cd certbot-dns-cloudflare python setup.py install cd ..
これで、Certbot側の準備は終了です。
api キーを用意します。
Cloudflareにログインし、プロフィールを表示、Global API Key を閲覧しコピーします。
api キーを保存しました。
/etc/letsencrypt/cloudflareapi.cfg
dns_cloudflare_email = takuya**************@gmail.com dns_cloudflare_api_key = *********************
キーが不用意に閲覧されなようパーミッションを設定しておきます。
sudo chmod 600 /etc/letsencrypt/cloudflareapi.cfg
これで、APIとキーの準備は終わりです。
起動テストを行います。
mydomain=example.com sudo /home/takuya/certbot/certbot-test/bin/certbot \ certonly \ -n --dry-run \ --cert-name $mydomain \ --dns-cloudflare \ --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \ --server https://acme-v02.api.letsencrypt.org/directory \ -d "*.$mydomain" \ -d $mydomain
Certbot を使ってワイルドカード証明書を発行します。
mydomain=example.com sudo $( which certbot ) \ certonly \ --cert-name $mydomain \ --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflareapi.cfg \ --server https://acme-v02.api.letsencrypt.org/directory \ -d "*.$mydomain" \ -d $mydomain
最後にWEBサーバーを再起動して終了です
sudo service nginx restart
複数枚を作るときは
次回以降は次のようにすると早いですね
cd ~/certbot git pull virtualenv certbot-test source ./certbot-test/bin/activate suod ./certbot-test/bin/certbot certonly
まとめ
ワイルドカード証明書は管理コストが減って便利。
こんかいは、Virtualenvを使ったのでsystemd に登録される自動更新のプログラムが使えないので、数ヶ月ごとに手作業で実行する必要はある。
この辺はそのうちAptレポジトリに含まれるCertbotが更新されるであろうから大丈夫だと思う。
ワイルドカードの証明書を使うのもいいけど、自動更新もあるわけだしランダムなドメイン名を無数に使わないなら、ワイルドカードは使わないで、Certbot-autoで自動更新のほうがいいかもしれない。
複数のドメインの証明書を1枚にすると同時にワイルドカードもまとめられたら嬉しい。試してみたい。
2019-03-27
記述追加
参考資料
- How to Retrieve Let's Encrypt SSL Wildcard Certificates using CloudFlare Validation on CentOS 7 | DigitalOcean
- GitHub - certbot/certbot: Certbot is EFF's tool to obtain certs from Let's Encrypt and (optionally) auto-enable HTTPS on your server. It can also act as a client for any other CA that uses the ACME protocol.
- Welcome to certbot-dns-cloudflare’s documentation! — certbot-dns-cloudflare 0 documentation
- Debian8 系に最新の certbot をインストールして Route53 で認証する - Qiita