ホームページをAWSで作ろう:LightsailでワードプレスでSSL導入
さて、ホームページを作ったら、SSL証明書を作成、導入してhttps化をすることは、今では当たり前になっています。
SSL証明書って年間の利用費用がかかったのと、CSR作ったり申請したりで結構めんどくさいんですが、いまでは「Let’s Encrypt」のおかげでそのようなことをしなくてもSSL証明書が無料で作成できるようになりました。
※ただし、3ヶ月しか持ちませんので、定期的な再作成が必要ではあります。
今回は、Amazon Lightsail でワードプレスインスタンスを作った中にSSLを導入してみました。
まぁ、ワードプレスがない環境でも同じです(^^;
※Lightsail のセットアップは、こちらを参照してください。
Let’s EncryptでSSL証明書を作成して導入する
ワードプレスを普通に導入したら、WebサーバーはApacheが導入されています。
作成手順とWebサーバーへの設置は、ほぼドキュメントの手順通りで、OKです。
※今回使用するドメインですが、”hidari-uchiwa.com”です。
「Bitnamiアプリケーション用のLet’s Encrypt SSL証明書を生成してインストールする」
ステップ1:レゴクライアントをインストールする
レゴクライアントなんですが、すでにインストールがされていました。
ですので、実施はしませんでしたが、手順の紹介だけしておきます。
1 2 3 4 5 6 |
$ 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 |
ステップ2:ドメインのLet’s Encrypt証明書を生成する
・すべてのBitnamiサービスをオフにします。
$ sudo /opt/bitnami/ctlscript.sh stop
bitnameやmysqlが停止します。
・証明書をリクエストします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
sudo /opt/bitnami/letsencrypt/lego --tls --email="info@kumakake.com" --domains="hidari-uchiwa.com" --domains="www.hidari-uchiwa.com" --path="/opt/bitnami/letsencrypt" run 08:47:36 No key found for account info@kumakake.com. Generating a P384 key. 08:47:36 Saved key to /opt/bitnami/letsencrypt/accounts/acme-v02.api.letsencrypt.org/info@kumakake.com/keys/info@kumakake.com.key 08:47:37 Please review the TOS at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf Do you accept the TOS? Y/n Y ※利用規約への同意です。 08:47:46 [INFO] acme: Registering account for info@kumakake.com !!!! HEADS UP !!!! Your account credentials have been saved in your Let's Encrypt configuration directory at "/opt/bitnami/letsencrypt/accounts". You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained from Let's Encrypt so making regular backups of this folder is ideal. 08:47:47 [INFO] [hidari-uchiwa.com, www.hidari-uchiwa.com] acme: Obtaining bundled SAN certificate 08:47:49 [INFO] [hidari-uchiwa.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/7045931068 08:47:49 [INFO] [www.hidari-uchiwa.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/7045931100 08:47:49 [INFO] [hidari-uchiwa.com] acme: use tls-alpn-01 solver 08:47:49 [INFO] [www.hidari-uchiwa.com] acme: use tls-alpn-01 solver 08:47:49 [INFO] [hidari-uchiwa.com] acme: Trying to solve TLS-ALPN-01 08:47:56 [INFO] [hidari-uchiwa.com] The server validated our request 08:47:56 [INFO] [www.hidari-uchiwa.com] acme: Trying to solve TLS-ALPN-01 08:48:03 [INFO] [www.hidari-uchiwa.com] The server validated our request 08:48:03 [INFO] [hidari-uchiwa.com, www.hidari-uchiwa.com] acme: Validations succeeded; requesting certificates 08:48:05 [INFO] [hidari-uchiwa.com] Server responded with a certificate. |
この結果として、下記のように各ファイルが作成されます。
$ sudo ls -al /opt/bitnami/letsencrypt/certificates/
-rw——- 1 root root 3364 Sep 7 08:48 hidari-uchiwa.com.crt
-rw——- 1 root root 1648 Sep 7 08:48 hidari-uchiwa.com.issuer.crt
-rw——- 1 root root 238 Sep 7 08:48 hidari-uchiwa.com.json
-rw——- 1 root root 288 Sep 7 08:48 hidari-uchiwa.com.key
ステップ3:Let’s Encrypt証明書を使用するようにWebサーバーを構成する
ドキュメントにはApacheやnginxの手順が書かれているのですが、今回は「アプローチBのApacheの場合(自己完結型のBitnamiインストール)」で行いました。
「アプローチAのApacheの場合(システムパッケージを使用したBitnamiインストール)」ってのもあるんですが、ディレクトリ構成がフィットしなかったため不採用としています。
1 2 3 4 5 6 7 |
$ 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/hidari-uchiwa.com.key /opt/bitnami/apache2/conf/server.key $ sudo ln -sf /opt/bitnami/letsencrypt/certificates/hidari-uchiwa.com.crt /opt/bitnami/apache2/conf/server.crt $ sudo chown root:root /opt/bitnami/apache2/conf/server* $ sudo chmod 600 /opt/bitnami/apache2/conf/server* |
・すべてのBitnamiサービスを再起動します。
$ sudo /opt/bitnami/ctlscript.sh start
この段階で、httpsで表示してみて、ChromeのデベロッパーツールでSSL証明書が動作していることを確認できます。
ワードプレスでSSLが使えるようにする
SSLの導入自体はできたんで、いよいよワードプレスでSSLが使えるようにします。
私は、プラグインの「Really Simple SSL」を利用しているので、それを使用した手順を記載します。
ステップ1:「Really Simple SSL」をインストールします。
普通にプラグインから追加してください(^^)
ステップ2:「Really Simple SSL」をセットアップします。
インストール完了後、ダッシュボードで「wp-config.phpが書き換えられません!」ってエラーが。。。
仕方ないんで権限を下記のように変更しました。
$ ls -al /opt/bitnami/apps/wordpress/htdocs/wp-config.php
-rw-r—– 1 bitnami daemon 4268 Sep 6 15:56 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
$ chmod 666 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
$ ls -al /opt/bitnami/apps/wordpress/htdocs/wp-config.php
-rw-rw-rw- 1 bitnami daemon 4268 Sep 6 15:56 /opt/bitnami/apps/wordpress/htdocs/wp-config.php
これで、ダッシュボードを再表示すると、
と表示してくれたので[はい、SSLを有効化します。]をクリックしてSSLを有効としました。
デフォルトでは、このような状態。。。
これでワードプレスへのSSL導入はOKです(^^)
SSL証明書を更新します。
Let’s Encrypt のSSL証明書は90日しか有効期限が有りません。
手動で更新するとしたら、期限が切れる前に更新をします。
1 2 3 |
$ sudo /opt/bitnami/ctlscript.sh stop $ sudo /opt/bitnami/letsencrypt/lego --tls --email="info@kumakake.com" --domains="hidari-uchiwa.com" --path="/opt/bitnami/letsencrypt" renew --days 90 $ sudo /opt/bitnami/ctlscript.sh start |
ただ、忘れないように更新するのは大変ですから、自動更新するようにします。
1)スクリプトを作成します。( /opt/bitnami/letsencrypt/scripts/renew-certificate.sh )
1 2 3 4 5 |
#!/bin/bash sudo /opt/bitnami/ctlscript.sh stop apache sudo /opt/bitnami/letsencrypt/lego --tls --email="info@kumakake.com" --domains="hidari-uchiwa.com" --path="/opt/bitnami/letsencrypt" renew --days 90 sudo /opt/bitnami/ctlscript.sh start apache |
2)スクリプトを実行可能とします。
$ sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh
$ sudo crontab -e
0 0 1 * * /opt/bitnami/letsencrypt/scripts/renew-certificate.sh 2> /dev/null
毎月1日0時に更新が走ります。