SSL証明書の取得 by Let's Encrypt with nginx
nginxを利用してLet's EncryptによりSSL証明書を取得するまで+αの個人的メモです。
環境
- Ubuntu 18.04.4 LTS
関連プログラムのインストール
$ sudo apt update $ sudo apt install certbot nginx
なお、これによりnginxはデフォルト状態で自動的に起動した。
指定ドメインについてのSSL証明書の取得
$ sudo certbot certonly --webroot -w /var/www/html/ -d ${FQDN}
/var/www/html/
はnginxのWebルートに対応するディレクトリのパス。
${FQDN}
はSSL証明書を取得したいドメイン。
なお、前提として、外部からのhttp://${FQDN}/*
への要求についてnginxが/var/www/html/*
を応答できるようにネットワーク(ファイアウォール及びDNSを含む)が設定されていなければならない。
これにより以下のファイルが作成される。
パス | 説明 |
---|---|
/etc/letsencrypt/live/${FQDN}/fullchain.pem |
SSL証明書 |
/etc/letsencrypt/live/${FQDN}/privkey.pem |
SSL証明書の秘密鍵 |
これにより得られたSSL証明書は、以下のアドレス
https://${FQDN}/*
へのアクセスについてセキュリティ警告を発生させないが、例えば以下のアドレス
https://www.${FQDN}/*
へのアクセスについてセキュリティ警告を発生させる。
SSL証明書にサブドメインをカバーさせる
$ sudo certbot certonly --expand --webroot -w /var/www/html/ -d ${FQDN} -d ${FQDN_SUB}
${FQDN_SUB}
はSSL証明書を取得したいサブドメイン。
なお、前提として、外部からのhttp://${FQDN}/*
及びhttp://${FQDN_SUB}/*
への要求についてnginxが/var/www/html/*
を応答できるようにネットワークが設定されていなければならない。
これにより、取得したSSL証明書がサブドメインをカバーするようになる。
例えば${FQDN_SUB}
=www.${FQDN}
とおくと、これにより得られた証明書は、以下のアドレス
https://${FQDN}/*
https://www.${FQDN}/*
へのアクセスについてセキュリティ警告を発生させない。
root以外のユーザからのSSL証明書等へのアクセスの確保
$ sudo chown root:${group} /etc/letsencrypt/{live,archive}/ $ sudo chmod g+rx /etc/letsencrypt/{live,archive}/
${group}は、SSL証明書等を利用したいプログラムの実行ユーザが属するグループ。
/etc/letsencrypt/live/${FQDN}/{fullchain,privkey}.pem
は、/etc/letsencrypt/archive/${FQDN}/
内のファイルへのシンボリックリンクとなっている。
デフォルトだと、/etc/letsencrypt/{live,archive}/
の所有はroot:rootであり、パーミッションは700であるため、root以外のユーザを実行ユーザとするプログラムはSSL証明書等にアクセスできない。
取得したSSL証明書の確認
$ sudo certbot certificates
取得したSSL証明書の更新
$ sudo certbot renew
これにより、取得したSSL証明書の全てが更新されるようである(未確認)が、有効期限の満了が30日以上先のSSL証明書は、以下のようなメッセージが表示されて更新されない模様。
The following certs are not due for renewal yet: /etc/letsencrypt/live/${FQDN}/fullchain.pem expires on yyyy-mm-dd (skipped) No renewals were attempted.