2020年9月10日木曜日

certbot の standalone プラグインで証明書を取得する

概要

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.pemprivkey.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 件のコメント:

コメントを投稿