letsencryptの運用


certbot設定

証明書発行失効更新などなどはcertbotを使って行います。便利。
設定ミスなんかでトライ回数が多いと1週間ペナルティを食らうので、注意。
too manyなんちゃらみたいなエラーがでたら、その時は素直に後日リトライしましょう。
エラーのとしては、nginxの設定ファイル証明書のパスを記述したまま実行したり、証明書の設定を記述しないままnginx起動とかです。(よくやる

certbotのインストール

$ sudo wget https://dl.eff.org/certbot-auto -O /usr/local/certbot-auto
$ sudo chmod a+x /usr/sbin/certbot-auto

nginxの停止

nginxの設定ファイルに余計なSSLの記述がないか確認する。
あればコメントアウト。

$ sudo service nginx stop

証明書のインストール

letsencryptではSANを利用した複数ドメインへのインストールが可能。その場合は"-d ドメイン"を併記する。
e.g. hoge.com,www.hoge.com
コケるときはnginxの設定ファイルを確認。nginxを停止させた状態で実行する。
※ただし、SANなので後からドメイン追加する場合は証明書を都度再発行となる。
※ドキュメントルートが別サブドメインは都度発行。
e.g. blog.hoge.com

$ sudo certbot certonly --webroot-path /var/www/hoge.com/html -d hoge.com -d www.hogehoge.com -m [email protected]

Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
-------------------------------------------------------------------------------
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1

上手く行けばCongratulations!みたいなメッセージが出ます。
作成した証明書とパスを確認。

$sudo certbot certificates
-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: hoge.com
    Domains: hoge.com www.hoge.com
    Expiry Date: 2019-09-15 14:06:29+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/hoge.com/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/hoge.com/privkey.pem

nginxの設定追記

こちらも各々の環境で。
vhostで運用してる場合はconf.dに入れてると思う。

$ sudo vi /etc/nginx/conf.d/hoge.com.conf

下記をserverディレクティブ内に追記
※必ずドメイン列記すること。".hoge.com"や"*.hoge.com"の表記はNG

server {
        server_name hoge.com www.hoge.com;
      (省略)
        listen 443 ssl;
        ssl_certificate     /etc/letsencrypt/live/hoge.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hoge.com/privkey.pem;
}

サービス再起動

起動でコケるときはnginxの設定ファイルを見直してください。

$ sudo service nginx restart

自動化

90日で期限が切れてしまうので、週1程度自動更新を設定します。
letsencriptは残り30日以内になると更新される。
下記コマンドは事前に通るかチェックしておくが吉。

$ crontab -e

毎週月曜1時に実行します
※左から、「分」「時」「日」「月」「曜日」

0 1 * * 1 root /usr/local/certbot-auto renew --force-renewal && service nginx restart

証明書とドメイン設定の削除

証明書の失効、設定削除は下記。
また、アーカイブに以前のドメイン設定が残ってたまま、証明書を再作成すると、"hoge.com-0001"みたいな名前の設定が作られて気持ち悪い。
そういうときは、下記のコマンドでドメイン設定ごと消してからやる。
ただし、追記したnginxのconfファイルは手動で消す。

$ sudo certbot delete -d hoge.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which certificate would you like to delete?
---------------------------------------------------------------------
1: hoge.com
2: hoge.com-0001
---------------------------------------------------------------------
Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 1

---------------------------------------------------------------------
Deleted all files relating to certificate example.com.
---------------------------------------------------------------------

その他気をつけること

・letsencryptではワイルドカードドメイン指定はできない。明示的にドメイン指定する必要がある
e.g. *.hoge.com → wp.hoge.com

・うまくいかない場合は意図しない箇所にletsencryptがnginxの設定に追記していないか確認したり。
$ grep server_name /etc/nginx/conf.d/*