1. Let’s Encryptとcertbotの関係
Let’s Encryptは公式ページTOPにも記載されていますが認証局です。利用当初は把握できていなかったのですが、certbotは認証局から証明書を取得したり更新したりする作業を自動化するプログラムです。
2. インストール
Let’s Encryptは認証局ですので利用者が特に準備するものはありません。証明書を取得するプログラムであるcertbotをセットアップすれば証明書を取得することができます。尚,証明書を取得するためには予めドメインを取得、利用するサーバにドメイン名を割り当てておきます。
ここではubuntu,nginxのサーバにcertbotをインストールします。
WEBサーバを一時停止
port80,443 を利用しているとcertbotが動かないため、一時停止しておきます。
sudo systemctl stop nginx
インストール
certbotインストール
インストール方法にはapt等によるインストールとsnapによるインストールを選択できます。ここではsnapによるインストールを行います。特に要件が無ければ推奨手順に従うのが良いでしょう。
snapによる手順は以下から確認できます。
sudo apt update sudo apt install snapd sudo apt-get remove certbot sudo snap install --beta --classic certbot
- TCP 80,443 を他プロセスが利用していると動作しません。
- DNSで登録ドメイン名が解決、実行サーバの到達性が確認できる必要がある。
sudo certbot --nginx
- メールアドレス入力
- ライセンス同意
- EFFからのメール受信
- ドメイン情報入力
- プロンプトで選択すると、/etc/nginx/nginx.conf に記載しているコンフィグに設定が自動で追記されます。
コンフィグ修正(追記)
コンフィグ設定を手動で設定する場合は、以下を追記します。
https サイトコンフィグファイル
ssl_certificate /etc/letsencrypt/live/[domainname]/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/[domainname]/privkey.pem; # managed by Certbot
http サイトコンフィグファイル
if ($host = [domainname]) { return 301 https://$host$request_uri; } # managed by Certbot
http サイトコンフィグファイル
nginxとphpを再起動し、コンフィグを反映します。
sudo vi /etc/nginx/conf.d/https.conf sudo ps aux | grep nginx sudo kill [プロセスNo] sudo systemctl start nginx sudo systemctl start php7.4-fpm
証明書の定期更新設定
let’sencryptの証明書は90日で期限が切れるため、自動更新を設定しておきます。
//certbot renewが動作するかテスト sudo certbot renew --dry-run //certbot がcronに登録されているか確認する。記載なければ作成する。 sudo cat /etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew