セルフホスティングでご利用いただける、AmazonLinux 2 の最新バージョンの Amimoto では、以下の手順で Let's Encrypt のインストールが可能です。
このドキュメントでは、example.com のドメインに対して Let's Encrypt を使った SSL デジタル証明書をインストール・設定を行う手順について解説いたします。
前提
- ドメインが取得済みであること
- DNS の各種ゾーン情報・レコードが設定されていること
- http://example.com 等のドメインでサーバへのアクセスが可能なこと
- WordPress のインストールが完了していること
作業内容
- SSL デジタル証明書のインストール
- SSL の設定
- 証明書を自動更新する設定 (オプション)
1. ドメインの SSL デジタル証明書をインストールする
サーバへログインします
$ ssh -i ssh-key.pem ec2-user@example.com
root ユーザとして作業します
$ sudo su -
example.com へ 証明書をインストールする場合
コマンド
# letsencrypt certonly -t -d example.com \
-a webroot --webroot-path=/var/www/vhosts/example.com/ \
--rsa-key-size 2048
注意: example.com の箇所は、ご利用のドメイン名と置換えて設定を行ってください。
Let's Encrypt からのメールを受取るために、メールアドレスを設定します:
Enter email address (used for urgent notices and lost key recovery) (Enter 'c'
to cancel): info+letsencrypt@example.com ※
Let's Encrypt の利用既約に同意します:
この画面で[a] キーを入力し [Enter]/[Return] を押してください。
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
Let's Encrypt がサーバへインストールされました。
証明書及び証明書チェーンは以下のディレクトリに保管されています:
/etc/letsencrypt/live/example.com/fullchain.pem
また秘密鍵は以下のディレクトリに保管されています
/etc/letsencrypt/live/example.com/privkey.pem
2. SSL の設定
Let's Encript と SSL デジタル証明書のインストールまで完了しました。次は、証明書を利用するようサーバの設定ファイル (/etc/nginx/conf.d/example.com-ssl.conf) を変更します。既存の example.com.conf を複製しexample.com-ssl.conf とファイル名を変えて編集をします。
注意: example.com の箇所は、ご利用のドメイン名と置換えて設定を行ってください。
example.com 用の設定ファイルをコピーし編集します
コマンド
# cd /etc/nginx/conf.d
# cp example.com.conf example.com-ssl.conf
# vi example.com-ssl.conf
[i] キーを押してから編集を行ってください。
設定内容
server {
listen 443 ssl http2;
server_name example.com;
root /var/www/vhosts/example.com;
index index.html index.htm;
charset utf-8;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AESGCM:HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
access_log /var/log/nginx/example.com-ssl.access.log main;
error_log /var/log/nginx/example.com-ssl.error.log;
include /etc/nginx/drop;
add_header X-Cache-Status $upstream_cache_status;
expires $expires;
set $mobile "";
#include /etc/nginx/mobile-detect;
include /etc/nginx/wp-front;
location ~* /(phpmyadmin|myadmin|pma) { access_log off; log_not_found off; return 404; }
#
# redirect server error pages to the static page /50x.html
#
error_page 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
注意: example.com の箇所は、ご利用のドメイン名と置換えて設定を行ってください。
編集が終ったら [Esc] を押し、続けて [Shift] キーを押しながら [z] を2回押して保存してください。
設定反映のため nginx を restart します。
コマンド
# service monit stop && service nginx restart
# service monit start
加えて、すでに WordPress を独自ドメインで運用されていて HTTPS 接続を強制する場合は、/etc/nginx/conf.d/example.com.conf の内容に return 301 https://example.com$request_uri; の1行を追加してください。
コマンド
# vi example.com.conf
[i] キーを押してから編集を行ってください。
設定内容
server {
listen 80;
server_name example.com;
root /var/www/vhosts/example.com;
index index.html index.htm;
charset utf-8;
access_log /var/log/nginx/example.com.access.log main;
error_log /var/log/nginx/example.com.error.log;
include /etc/nginx/drop;
add_header X-Cache-Status $upstream_cache_status;
expires $expires;
set $mobile "";
#include /etc/nginx/mobile-detect;
location / {
return 301 https://example.com$request_uri;
}
#
# redirect server error pages to the static page /50x.html
#
error_page 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
編集が終ったら [Esc] を押してください。その後、[Shift] キーを押しながら [z] を2回押して保存してください。
その後、設定反映のため nginx を restart します。
# service monit stop && service nginx restart
# service monit start
Let's Encrypt と SSL デジタル証明書の設定、サーバ設定の変更は以上です。
3. 証明書を自動更新する設定 (オプション)
Let's Encrypt は発行後90日で証明書の有効期限が切れるため、自動で証明書の更新を行うように設定をするとよいでしょう。
※ 毎週月曜日 AM1:00に letsencrypt renew を実行する場合
コマンド
以下の2行をコピーして、[i] キーを押してから crontab -e で開いた画面へペーストしてください。
# crontab -e
編集が終ったら [Esc] を押してください。その後、[Shift] キーを押しながら [z] を2回押して保存してください。
# Renewing Lets Encrypt certificate
0 1 * * 1 /opt/letsencrypt/bin/letsencrypt renew && /sbin/service nginx restart > /dev/null 2>&1
証明書の自動更新設定は以上です。