WEBサイトのSSL対応方法_レンタルサーバとVPS
Wordpressを使用したWEBサイトで、シングルサイト構成、マルチサイト構成、VPS構成の場合のhttpからhttpsに変更する手順を記載します。
目的
SSL非対応のサイトをSSL対応にします。
2018年7月リリースのGoogle Chrome 68からSSL化を推奨の動きをうけて、 従来のWEBサイトを何度かSSL化することを行ったためそのメモ
ここで記載するのは以下3つ、前提としてどのパターンもWordpressを運用しています。
- レンタルサーバの場合
- レンタルサーバの場合(マルチサイト運用)
- VPSサーバの場合
結果
WEBサイトのSSL化の期待値
レンタルサーバの場合、レンタルサーバ(マルチサイト)の場合、VPSサーバの場合、すべてで以下の状態にします。
- Let’s Encryptを使用してサイト内のURLをhttpからhttpsに変更します。
- 旧httpにアクセスされた場合httpsへ301リダイレクトを行います。
方法
フロー
1Let’s Encryptの設定 |
↓ |
2301リダイレクトの設定 |
↓ |
3WordPressの設定 |
↓ |
4その他WEBサイトにかかわるサービスの設定変更 |
レンタルサーバの場合
Let’s Encryptの設定
前提
レンタルサーバ | さくらレンタルサーバ |
さくらレンタルサーバでの実行手順は以下参考。 基本的にボタンを押すだけ、反映までに少しだけ時間がかかる。
301リダイレクトの設定
httpsではなく、従来のhttpのURLでアクセスされた場合の対処法としてhttpsへリダイレクトするように設定する。 301リダイレクト、302リダイレクトなどがあるが、今回は恒久的な変更であり、Googleに被リンク評価などを引き継がせるため301リダイレクトを行う。
※302リダイレクトは一時的な転送
301リダイレクトの設定は.htaccessの変更を変更する。
vi .htaccess
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
値 | 説明 |
---|---|
RewriteCond | RewriteRule適用のための条件を記載するここでの記載はhttpでアクセスされた場合 |
RewriteRule | RewriteRuleここでの記載はすべての文字列を対象にhttpsのアドレスに置き換え301リダイレクトする |
WordPressの設定
WordPressから[設定]->[一般設定]からURL部分を変更する。 ただhttpsに変更するだけ。 ・WordPressアドレス(URL) ・サイトアドレス(URL)
レンタルサーバ(マルチサイト)の場合
Let's Encryptの設定
シングルサイトの場合と同じ
301リダイレクトの設定
シングルサイトの場合と同じ
WordPressの設定
マルチサイトの場合、配下の複数のサイトでWordpressのURL設定変更をする必要がる しかし、なぜだか親サイトのURLはGUIから設定ができない。 そのためMySQLのDBを自分で書き換える必要がある。
確認は[サイト]->[すべてのサイト]->[対象のサイト]->[設定]から確認が可能。 子サイトの場合はここからGUIで更新が可能。
※親サイトと子サイトのテーブル名は名前が似ているので間違わないように
mysql> SHOW TABLES FROM webmemo_db;
+--------------------------------+
| Tables_in_webmemo_db |
+--------------------------------+
・・・省略
| wpXXXXX2_options |
・・・省略
| wpXXXXXoptions |
・・・省略
+--------------------------------+
34 rows in set (0.00 sec)
更新するテーブルはwXXXXXoptionsテーブルの以下2つ ・siteurl ・home
mysql> select * from wpXXXXXoptions where option_name='siteurl';
+-----------+-------------+---------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+---------------------+----------+
| 1 | siteurl | http://webmemo.tokyo| yes |
+-----------+-------------+---------------------+----------+
1 row in set (0.00 sec)
mysql> select * from wpXXXXXoptions where option_name='home';
+-----------+-------------+---------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+---------------------+----------+
| 2 | home | http://webmemo.tokyo| yes |
+-----------+-------------+---------------------+----------+
1 row in set (0.00 sec)
MySQLを更新する。httpをhttpsにする。
UPDATE wpXXXXXoptions SET option_value='https://webmemo.tokyo' WHERE option_id=1;
UPDATE wpXXXXXoptions SET option_value='https://webmemo.tokyo' WHERE option_id=2;
mysql> UPDATE wpXXXXXoptions SET option_value='https://webmemo.tokyo' WHERE option_id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> UPDATE wpXXXXXoptions SET option_value='https://webmemo.tokyo' WHERE option_id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from wpXXXXXoptions where option_name='siteurl';
+-----------+-------------+----------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+----------------------+----------+
| 1 | siteurl | https://webmemo.tokyo| yes |
+-----------+-------------+----------------------+----------+
1 row in set (0.00 sec)
mysql> select * from wpXXXXXoptions where option_name='home';
+-----------+-------------+----------------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------+----------------------+----------+
| 2 | home | https://webmemo.tokyo| yes |
+-----------+-------------+----------------------+----------+
1 row in set (0.00 sec)
MySQLのDBを更新後、GUIから確認を行う。
VPSサーバの場合
VPSの場合、主な違いはLet's Encryptの設定の箇所。独自ドメインが設定されている場合 SSL証明書の有効期限は3ヶ月なので、3ヶ月ごとに更新する必要がある。
Let's Encryptの設定
前提
OS | CentOS release 6.10 (Final) |
サイトをSSL化するには、ApacheのSSLモジュールmod_sslが必要
[root@www15123uf themes]# httpd -M | grep ssl
[Sun Jan 19 00:08:27 2020] [warn] module php5_module is already loaded, skipping
Syntax OK
ssl_module (shared)
存在しない場合は以下でインストールする
yum install mod_ssl
SSLを使用可能にするにはhttp通信の80番ポートではなく、https用の443番ポートを開ける
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
/etc/init.d/iptables restart
[root@www15123uf themes]# iptables --list | grep http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:https
※80(http)もiptablesに同じ記述でポートを開放している
certbotのインストール
[root@www15123uf themes]# yum install epel-release
・・・省略
[root@www15123uf themes]# wget https://dl.eff.org/certbot-auto
[root@www15123uf themes]# yum install certbot python-certbot-apache
・・・省略
▼証明書の発行と自動更新設定
[root@www15123uf themes]# /var/letsencrypt/letsencrypt/certbot-auto certonly -d webmemo.tokyo
値 | 説明 |
---|---|
-d | (文字列)SSL/TLS サーバ証明書の取得を申請するドメイン名を指定します。 |
証明書は3か月で有効期限がきれてしまうため、その都度更新をしなければならない。>
cronを使用して証明書の自動更新設定をする。cron毎月1日の4時に更新する設定 cronは以下のような書式で記載する。
分 時 日 月 曜日 実行コマンド
[root@www15123uf cron.d]# vi /etc/cron.d/letsencrypt
00 04 01 * * root /etc/rc.d/init.d/httpd stop && /var/letsencrypt/letsencrypt/certbot-auto renew && /etc/rc.d/init.d/httpd start
▼SSL設定の変更
vi /etc/httpd/conf.d/ssl.conf
[root@www15123uf myserver.com]# grep pem /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/ドメイン名/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ドメイン名/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ドメイン名/chain.pem
301リダイレクトの設定
レンタルサーバの場合と同じ
WordPressの設定
レンタルサーバの場合と同じ
参考
- ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」- さくらのナレッジ
- 無料SSL】サーバコントロールパネルからの導入手順- さくらレンタルサーバ
その他
WEBサイトに関連するサービスの設定変更
・Googleサーチコンソールの設定変更を行う。
・Googleアナリティクスの設定変更を行う。