LoginSignup
23
21

More than 3 years have passed since last update.

Bitnamiに乗っているWordPressのドメインSSL化手順

Last updated at Posted at 2018-12-11

1. はじめに

SSL証明書は無料の「Let's Encrypt」を使用し、その操作にはGo言語製のACMIクライアント「Lego」を使用する(あのLEGOじゃないよ)。

適用するドメインは「Bitnami」上で動く「WordPress」製のWebサイトで使用しているもの。

今から書いていく実装方法の説明の中で使用する「APP_DOMAIN」「MAIL@EXAMPLE.COM」は適宜変更。見出しに出てくる「[WP]」は WordPress 上で行う作業を指しています。

2. Legoのインストール

CLI
$ cd /tmp
$ curl -s 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 mv lego /usr/local/bin/lego

3. Legoを使ってSSL証明書を発行する

CLI
$ sudo /opt/bitnami/ctlscript.sh stop
$ sudo lego --email="MAIL@EXAMPLE.COM" --domains="APP_DOMAIN" --path="/etc/lego" run
Your account credentials have been saved in your Let's Encrypt
configuration directory at "/etc/lego/accounts/acme-v02.api.letsencrypt.org/MAIL@EXAMPLE.COM".
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.
2018/12/09 08:10:30 [INFO] [APP_DOMAIN] acme: Obtaining bundled SAN certificate
2018/12/09 08:10:31 [INFO] [APP_DOMAIN] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/******************************
2018/12/09 08:10:31 [INFO] [APP_DOMAIN] acme: Authorization already valid; skipping challenge
2018/12/09 08:10:31 [INFO] [APP_DOMAIN] acme: Validations succeeded; requesting certificates
2018/12/09 08:10:32 [INFO] [APP_DOMAIN] Server responded with a certificate.

4. 作成されたSSL証明書をシステムから参照できるようにする

CLI
$ 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 -s /etc/lego/certificates/APP_DOMAIN.key /opt/bitnami/apache2/conf/server.key
$ sudo ln -s /etc/lego/certificates/APP_DOMAIN.crt /opt/bitnami/apache2/conf/server.crt
$ sudo chown root:root /opt/bitnami/apache2/conf/server*
$ sudo chmod 600 /opt/bitnami/apache2/conf/server*

$ sudo /opt/bitnami/ctlscript.sh start

5. SSL証明書を自動更新させる

SSL証明書更新用のスクリプト「/etc/lego/renew-certificate.sh」を作成し、cronで定期実行させる。

CLI
$ sudo vi /etc/lego/renew-certificate.sh
=================================
#!/bin/bash
$ sudo /opt/bitnami/ctlscript.sh stop apache
$ sudo /usr/local/bin/lego --email="EMAIL@EXAMPLE.COM" --domains="APP_DOMAIN" --path="/etc/lego" renew
$ sudo /opt/bitnami/ctlscript.sh start apache
=================================

$ sudo chmod +x /etc/lego/renew-certificate.sh

$ sudo crontab -e
=================================
0 0 1 * * /etc/lego/renew-certificate.sh 2> /dev/null
=================================

$ sudo crontab -l
0 0 1 * * /etc/lego/renew-certificate.sh 2> /dev/null

6. [WP] .htaccessとwp-config.phpの設定

WordPressの設定ファイル「.htaccess」「wp-config.php」をHTTPSプロトコルに適用させる。

CLI
$ sudo vi /opt/bitnami/apps/wordpress/htdocs/.htaccess
=================================
# 以下のコードを追加
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} !=on [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
:
=================================
CLI
$ vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php
=================================
// プロトコルを "https://" に変更
define('WP_SITEURL', 'https://' . $_SERVER['HTTP_HOST'] . '/');
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST'] . '/');

// 以下のコードを追加
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
    $_SERVER['HTTPS']='on';
=================================

Apacheを再起動させる。

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

7. [WP] 記事コンテンツ内のテキストを変換

記事コンテンツ内の「http://」というテキストを「https://」に変換する。テキストの変換はプラグイン「Search Regex」を使用する。

使い方は以下の記事を参考に。

反省点・注意点とか

  • 上手くHTTPSに切り替わらない場合は「6. [WP] .htaccessとwp-config.phpの設定」部分のコードがおかしい場合はある
  • EC2のセキュリティグループで「443」ポート(HTTPS)を開ける(開けない場合、サイトにアクセスするとリダイレクトループが起こる)
  • ブラウザのキャッシュは切ろう

参考記事

23
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
21