Certbot
tech certbot
Lastmod: 2020-07-05

certbot公式のdockerイメージを使って証明書を管理する方法.

前提

  • DNSの設定が完了していること.
    具体的には,外部のサービスから取得したいFQDNにした時,証明書をインストールする ホストへ到達するようになっていること.
    DNSの設定やNAPTの設定はここでは省略する.
  • 証明書は/opt/certbot/etc配下に配置する.
    webサーバは,同ディレクトリの証明書を読み取れるようにする必要があるので, 運用のことも考えて指定するのをお勧めする.
  • もしwebサーバが動作していたらポート番号が衝突するので,webサーバを止めておく.

新規証明書の取得

certbotの公式docker imageを利用する.

証明書を取得したいドメインをFQDN,ドメイン管理者のメールアドレスを, ADMIN_MAIL_ADDRとすると,以下のようなコマンドで取得する. もしマルチドメイン証明書が欲しかったら-dオプションを連ねる. ワイルドカード証明書はわからん.

docker run --rm -p 80:80 \
    -v /opt/certbot/etc/letsencrypt:/etc/letsencrypt \
    -v /opt/certbot/var/log/letsencrypt:/var/log/letsencrypt \
    certbot/certbot certonly --standalone --agree-tos \
    --email ADMIN_MAIL_ADDR \
    -d FQDN

nginxの場合,ファイルは以下を指定.

ssl_certificate
/opt/certbot/etc/letsencrypt/live/FQDN/fullchain.pem
ssl_certificate_key
/opt/certbot/etc/letsencrypt/live/FQDN/privkey.pem
ssl_trusted_certificate
/opt/certbot/etc/letsencrypt/live/FQDN/chain.pem (中間認証局証明書とルートCA証明書)

更新

以下のコマンドを定期的に実行すれば,証明書の残期間が1ヶ月未満になった時に 更新してくれる.
同ディレクトリでまとめて管理している証明書が複数あれば,全部まとめてやってくれる.

docker run --rm -p 80:80 \
    -v /opt/certbot/etc/letsencrypt:/etc/letsencrypt \
    -v /opt/certbot/var/log/letsencrypt:/var/log/letsencrypt \
    certbot/certbot renew

失効&削除

普通セットだと思うのでまとめて.

証明書を失効させるには,証明書ファイルを直接指定する.
タイミングによっては,直前の証明書 (cert2.pem) も有効である場合もあると思うの で,気になる人はそっちも失効させてもいいかも.

docker run --rm -p 80:80 \
    -v /opt/certbot/etc/letsencrypt:/etc/letsencrypt \
    -v /opt/certbot/var/log/letsencrypt:/var/log/letsencrypt \
    certbot/certbot revoke \
    --cert-path=/etc/letsencrypt/archive/FQDN/cert1.pem

証明書を削除する. いくつかのファイルに分散してるので,手で消すのは面倒なのでコマンドで消すのをオ ススメ.

docker run --rm -p 80:80 \
    -v /opt/certbot/etc/letsencrypt:/etc/letsencrypt \
    -v /opt/certbot/var/log/letsencrypt:/var/log/letsencrypt \
    certbot/certbot delete \
    -d FQDN
comments powered by Disqus