LightSail環境にSSL証明書を導入して信頼できるブログにするための手順

blog

以下の記事で LightSail 上で WordPress を動かせるようになった。しかし、ここまでの作業だけでブログのページを開くとSSL証明書が登録されていないのでセキュアじゃないよと怒られる。。そこで今回は bitnami公式ドキュメント に沿って、Let’s EncryptのSSL証明書を登録してセキュアなブログにしていく。

LightSailとWordPressで簡単にブログをはじめる方法
Amazon LightSailを使ってWordPressのブログをはじめてみませんか?低コストで自分のサーバを設定してブログをはじめることができます。簡単に自分のブログを持ちたい人のためにサーバの構築からドメインの設定方法までを紹介します。

準備:Lego を導入する

まずは証明書作成のためにクライアントツール Lego を使えるように準備する。このクライアントを導入すると Let’s Encrypt の証明書作成を良い感じでやってくれて便利。

bitnamiユーザでサーバにSSH接続して、以下のコマンド実行していく。X.Y.Z には Lego のバージョンを指定する。github リポジトリから最新版をダウンロードして、解凍、letsencrypt ディレクトリ以下にクライアントが設置される。

cd /tmp
curl -Ls https://api.github.com/repos/xenolf/lego/releases/latest | grep browser_download_url | grep linux_amd64 | cut -d '"' -f 4 | wget -i -
tar xf lego_vX.Y.Z_linux_amd64.tar.gz
sudo mkdir -p /opt/bitnami/letsencrypt
sudo mv lego /opt/bitnami/letsencrypt/lego

初回のみ

ドメイン用の証明書を作成する

次は実際に証明書を作成していく。

まずは稼働中のサービスを停止。

sudo /opt/bitnami/ctlscript.sh stop

証明書を作成する。証明書を作成するコマンドは以下の通り。作成する際には、メールアドレスとドメイン名を登録する必要がある。証明書の有効期限は90日。有効期限が近くのここで設定したメールアドレス宛に証明書更新の案内が通知されるようになっている。

sudo /opt/bitnami/letsencrypt/lego --tls --email="メールアドレス" --domains="ドメイン名" --path="/opt/bitnami/letsencrypt" run

コマンド実行後、TOS(Terms of service)への同意を求められます。PDF の URL が提示されるので、中身を確認して同意する。

Please review the TOS at https://letsencrypt.org/documents/LE-SA-v1.2-N
ovember-15-2017.pdf
Do you accept the TOS? Y/n

正常に完了すると、以下のディレクトリに証明書たちが作成されているはず。ドメイン名.crt、ドメイン名.issuer.crt、ドメイン名.json、ドメイン名.key というファイルが作成されていればOK。

/opt/bitnami/letsencrypt/certificates

ちなみにDNSの設定がうまく行っていないときは以下のエラーが発生する。前回設定したレコードの設定を見直そう。

acme: error: 400 :: urn:ietf:params:acme:error:dns :: DNS problem: NXDOMAIN looking up A for ドメイン名 – check that a DNS record exists for this domain

サーバに証明書を登録する

証明書を作成できたのでサイトに証明書を登録する。

まずは、作成された証明書ファイルたちのパーミッションを変更していく。次のコマンドを実行します(ドメイン名の箇所を適宜変更)。

sudo mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/server.crt.old
sudo mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/server.key.old
sudo mv /opt/bitnami/apache2/conf/server.csr /opt/bitnami/apache2/conf/server.csr.old
sudo ln -sf /opt/bitnami/letsencrypt/certificates/ドメイン名.key /opt/bitnami/apache2/conf/server.key
sudo ln -sf /opt/bitnami/letsencrypt/certificates/ドメイン名.crt /opt/bitnami/apache2/conf/server.crt
sudo chown root:root /opt/bitnami/apache2/conf/server*
sudo chmod 600 /opt/bitnami/apache2/conf/server*

今回は Apache を使ったインスタンスを構築したので Apache のディレクトリを指定しているが、各ファイルのディレクトリはサーバ構成によって異なる場合があるので注意。別バージョンのコマンドは公式ドキュメントに記載があります。あるいは、各WEBサーバの設定ファイルで指定箇所を確認することもできる。

これで証明書の登録が完了したので、サービスを再開。

sudo /opt/bitnami/ctlscript.sh start

設定したサイトを開いて、アドレスバー横の鍵マークが閉じていればOK。

証明書を更新する

有効期限が近くなるとメールで更新せよとの通知がある。lego のコマンドを使って renew オプションを指定すれば更新できる。

作成済みの証明書を更新するスクリプトがあると便利なので作っておく。次のスクリプトを作成して /opt/bitnami/letsencrypt/scripts/renew-certificate.sh として置いておく。通知が来たらこのスクリプトを実行すればOK。

#!/bin/bash

email="email@example.com"
domain="yourdomain.com"

sudo /opt/bitnami/ctlscript.sh stop apache
sudo /opt/bitnami/letsencrypt/lego --tls --email=${email} --domains=${domain} --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start apache

これらは cron に登録しておけば自動的に更新してくれるので通知を気にしたり作業しなくて済む。

タイトルとURLをコピーしました