【後編】Amazon Lightsail の WordPressサイトをSSL化する

LitesailでWordpressサイトを立ち上げた前回の続編。
で、今どきのwebサイトなので、HTTPS化したいと思います。HTTPS化するためには認証局で取得したSSL/TSL証明書を使うんですが、サーバーに直接設置する方法と、ロードバランサーに設置する方法のざっくり二通りあります。今回はLitesailでロードバランサーを使わずにHTTPS化する方法を実施しました。SSL/TLS証明書は Let’s Encrypt で取得します。 

ロードバランサーでLitesail  HTTPS化

冒頭で書いたとおり、HTTPS化するにはSSL/TSL証明書を設置し設定する必要がありますが、方法としては、サーバーに直接設置する方法と、その前段にある、ロードバランサーとかプロキシサーバー、ルーターに設置する方法があります。
複数台設置する可能性があるサーバーよりロードバランサーなどに証明書を貼っておけば、拡張性を考えたとき便利です。
ロードバランサーにSSL証明書をつけておくと、その後ろに負荷分散したサーバーを普通に立てるだけで、ロードバランサーHTTPS通信をしてくれるので、各サーバーに証明書を設定する手間が省けます!
Litesail にはロードバランサーをボタン一発で作成できます。そこにSSL/TSL証明書をアタッチすることで簡単にHTTPS化できます。
SSL/TLS証明書は、あの無料で有名な Let’s Encrypt で取得することにします。

ロードバランサーなしでLitesail  HTTPS化

ロードバランサーにも費用がかかります。$18/月 です。格安のロードバランサーだなとも思いますが、そもそもロードバランサーが必要なアクセス数がなさそうです。そんなアクセスは当面なさそうなので、直接Litesailで用意したインスタンスに証明書を追加してコストを掛けないほうが運用者としては賢そうです。

そこで、ちょっと手間ですが、Litesailのインスタンス サーバーに直接、 Let’s Encrypt で取得したSSL/TLS証明書を設置します。

Let’s Encrypt でSSL/TLS証明書を取得

Let’s Encrypt は、クライアントソフトウェア「Certbot」を使用することで、SSL/TLS サーバ証明書の取得・更新作業を自動化できる仕組みになっています。
Certbot クライアントの適切なインストール手順は、OS(ディストリビューション)によって異なります。使用している OS を選んでください。

https://letsencrypt.jp/usage/

sshで接続して、Litesailのインスタンス のディストリビューションとバージョンを確認します。

$ cat /etc/os-release

NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial

Ubuntu 16.04.4 LTS であることがわかりましたので、Let’s Encrypt のサイトに従って設定していきます。

$ sudo apt-get install letsencrypt python-letsencrypt-apache

本来ならば、ここでドメイン名を聞いてきて指示に従えば、完了!となるようなんですが、私の環境ではエラーが出てしまったので、「その他の UNIX 系 OS」を参考にインストールすることになりました。(トホホ)
*www.example.com の部分はご自分のドメイン名に置き換えてください。

$ sudo mkdir /opt/bitnami/letsencrypt
$ cd /opt/bitnami/letsencrypt
$ sudo wget https://dl.eff.org/certbot-auto
$ sudo chmod a+x ./certbot-auto
$ sudo ./certbot-auto
$ sudo ./certbot-auto certonly --webroot -w /opt/bitnami/apps/wordpress/htdocs/ -d www.example.com
$ mv /opt/bitnami/apache2/conf/server.key /opt/bitnami/apache2/conf/serverkey.old
$ mv /opt/bitnami/apache2/conf/server.crt /opt/bitnami/apache2/conf/servercrt.old
$ sudo ln -s /etc/letsencrypt/live/www.example.com/fullchain.pem /opt/bitnami/apache2/conf/server.crt
$ sudo ln -s /etc/letsencrypt/live/www.example.com/privkey.pem /opt/bitnami/apache2/conf/server.key
$ sudo /opt/bitnami/ctlscript.sh restart apache

WordPressの設定を修正

$ cd /opt/bitnami/apps/wordpress/htdocs
$ sudo vi wp-config.php
以下の2行をhttp→httpsへ変更
define('WP_SITEURL', 'https://DOMAIN/');
define('WP_HOME', 'https://DOMAIN/');

Apacheの設定確認

$ cd /opt/bitnami/apps/wordpress/conf/
$ sudo vi httpd-prefix.conf
リダイレクトの設定を以下のとおりか確認、違ったら修正します。。
#https redirect
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]

# App url moved to root
DocumentRoot "/opt/bitnami/apps/wordpress/htdocs"
#Alias /wordpress/ "/opt/bitnami/apps/wordpress/htdocs/"
#Alias /wordpress "/opt/bitnami/apps/wordpress/htdocs"

RewriteEngine On
RewriteCond "%{HTTP_HOST}" ^ec2-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})\..*\.amazonaws.com(:[0-9]*)?$
RewriteRule "^/?(.*)" "%{REQUEST_SCHEME}://%1.%2.%3.%4%5/$1" [L,R=302,NE]

Include "/opt/bitnami/apps/wordpress/conf/httpd-app.conf"

Apache再起動

$ sudo /opt/bitnami/ctlscript.sh restart apache

無料で取得できる、SSL/TLS証明書 Let’s Encrypt 。設定もサイトを見ながら行うと比較的かんたんに行うことができす。
LightsailをHTTPS化できればかなりお得感のあるサイトになると思います。ちょっと今どきのレンタルサーバーで独自ドメイン名HTTPS化の価格調査を怠っているので、比較をしていませんが、かなり魅力的なサービスになっているでしょう!?