最近webコンパネのあるソフトはどれもhttpsになっていて、owncloudやesxi,zabbixなど証明書のエラーがうるさいのでLet's Encryptで証明書を取った。
webrootとstandaloneの2種類があるみだいだけど、webrootがうまく行かなかったのでstandaloneにしている。
証明書を取るためのcertbotはepelにあるのでyumでインストールできる。gitから持ってきてもいい。
yum install certbot
証明書の取得はいかのコマンドでできる。初回のみ、--agree-tosオプションが必要になるかもしれない。
certbot certonly --standalone -d depra.net
この段階でなんらかのエラーが出たときには、だいたい80か443を他のプロセスが開いている。certbotが使うので証明書取得の際は開けておく必要がある。
証明書を取るともろもろ/etc/letsencrypt/live/配下に保管される。多分取得したあとのコマンドの結果に書いてある。nginxにはこの中にある証明書と鍵を指定してあげる。
serverディレクティブに以下を書いておけば大丈夫なはず。
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/depra.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/depra.net/privkey.pem;
だけども90日ごとに更新が必要だし、standaloneだとnginxをとめないといけない。めんどくさいのでcronとcertbotのオプションで自動にした。
毎月20日の朝4時に動かすようにした。
00 4 20 * * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
証明書の更新は必要なしと判断された場合はpre-hookもpost-hookも動かないので安心。定期再起動感覚で動かしている。サーバー停止させたくない場合は、webrootのほうがいい。
証明書のエラーがないだけでかなりいい感じ。