以下の記事で LightSail 上で WordPress を動かせるようになった。しかし、ここまでの作業だけでブログのページを開くとSSL証明書が登録されていないのでセキュアじゃないよと怒られる。。そこで今回は bitnami公式ドキュメント に沿って、Let’s EncryptのSSL証明書を登録してセキュアなブログにしていく。
準備: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 に登録しておけば自動的に更新してくれるので通知を気にしたり作業しなくて済む。