概要
DNS を使った manual プラグインでの取得方法を過去に紹介しました
今回は standalone プラグインを使った方法を紹介します
standalone プラグインは DNS ではなく HTTP/80 ポートを使って証明書の取得を行います
環境
- Ubuntu18.04
- certbot 1.7.0
事前準備: A レコードを登録する
取得するドメイン or サブドメインの A レコードを DNS に登録しましょう
standalone プラグインは証明書取得時に指定したドメインの 80 番ポートにアクセスするため DNS で引けることが必須条件になります
certbot-auto インストール
cd /usr/local/bin
sudo git clone https://github.com/certbot/certbot.git
sudo ln -s /usr/local/bin/certbot/certbot-auto /usr/local/bin/
HTTP/80 ポートを停止
Nginx なり Apache Httpd なりですでに 80 番ポートを LISTEN している場合は停止しましょう
docker の場合はコンテナを停止しておきます
docker-compose stop proxy
証明書取得
では証明書を取得します
今回はインタラクティブモードで取得します
sudo certbot-auto certonly --standalone -t
メールアドレスと取得する証明書のドメインを入力します
問題なければ証明書が取得できます
取得後に証明書が配置されるパスは /etc/letsencrypt/live/domain.name
になります
fullchain.pem
や privkey.pem
がシンボリックされているのでこれを使います
トラブルシュート
主な原因としては以下が考えられると思います
- Let’sEncrypt から指定のドメインの 80 番ポートにアクセスできない
- ファイアウォールの設定を見直しましょう
- A レコードが引けない
- 少し待ってから再度実施しましょう
- dig コマンドなどで A レコードが引けるか確認しましょう
HTTP/80 ポートの再起動
止めていた Nginx や httpd を再起動しましょう
docker-compose start proxy
もし証明書のパスが変わって docker-compose.yml などを書き換えた場合はコンテナを再作成しましょう
docker-compose rm proxy
docker-compose create proxy
docker-compose start proxy
Tips: 古い証明書の削除
今回は standalone プラグインを使って新規で証明書を作成しました
もし manual プラグインを使って別環境で同一ドメインの証明書を取得していた場合は manual プラグイン側の証明書はもう使わないので削除しましょう
sudo certbot-auto delete --cert-name domain.name
Let’sEncrypt はすでに同一ドメインで証明書を発行していても別プラグインを使えば取得できてしまいます
なので一時的に同一ドメインの複数証明書ができてしまいます
管理用のメールアドレスなども同一のものが使えてしまうので混乱しないように使わなくなったプラグイン側の証明書は削除しておきましょう
このあとは自動更新をする
基本は renew
コマンドで OK です
sudo certbot-auto renew
証明書を新規で作成したばかりだと証明書の更新の必要がないというエラーになるので更新できません
また standalone プラグインを使った更新は結局 80 番ポートの停止が必要なので renew
前に同じように停止し更新後に再起動が必要になります
自動更新の方法はまた別記事でまとめる予定ですが --pre-hook
と --post-hook
オプションを使って自動更新することになると思います
最後に
certbot の standalone プラグインを使って証明書の取得を行ってみました
一瞬 http が止まるので 80 番ポートで動作しているサービスの場合は前に紹介した manual プラグインや webroot プラグインを使ったほうが良いかなと思います
ただ自動更新まで考えるとやはり一番簡単なのは standalone プラグインなんじゃないかなと思います
0 件のコメント:
コメントを投稿