WordPressサイトを常時SSL化する方法

この記事の目次

なぜ常時SSLが必要なのか

SSLとは

SSL(Secure Socket Layer)は、「データの盗聴」「データの改ざん」「なりすまし」を防ぐための通信技術です。ひと昔前までは、フォームに個人情報などの重要な情報を入力するページのみにSSLが使われていました。

常時SSL化

常時SSL化とは、一部のページだけでなくWebサイトのすべてのページにSSLを用いることです。

スマートフォンやタブレット端末などの普及に伴い、公衆無線LAN(Wi-Fiなど)のインフラが拡大しています。ただ、安全性の低い公衆無線LANを介した通信では、「中間者攻撃」によってデータを傍受される危険性があります。

また、日本のWebブラウザの44.28%(2018年11月時点)を占めるChromeでは、2018年7月からSSL化されていないページを開くとアドレスバーに「保護されていない通信」という警告が表示されるようになりました。

常時SSL化の手順

手順1. データベース(MySQL)のバックアップを取る

作業の途中で手順を間違えても元の状態に復元できるように、データベースのバックアップを取ります。データベースのバックアップを取るには、「BackWPup」プラグインが便利です。

  • 「BackWPup」プラグインをインストールし、有効化します。
  • [BackWPup]メニュー→[ダッシュボード]を選択します。
  • [データベースのバックアップをダウンロード]ボタンをクリックします。

手順2. SSL化のWordPressプラグインを無効化する

前述の通り、SSLはお問い合わせフォームなどの一部のページのみに使用されていました。一部のページをSSL化するために、「WordPress HTTPS (SSL)」などのWordPressプラグインを使っている場合があります。常時SSL化する際には必要がないため、これらのプラグインを無効化しておきます。

手順3. SSLの設定をする

SSLの設定方法は、レンタルサーバーやSSLの種類によって異なります。お使いのレンタルサーバーのホームページにSSLの設定方法が記載されていると思いますので、そちらを参照してください。

このSSLの設定には時間がかかる場合があります。https://〜のURLでアクセスできるようになるまでは、以降の作業は行わないでください。

手順4. 内部リンクと外部ファイルのパスを書き換える

WordPressのテーマに記載されている内部リンクがhttp://になっている場合、https://に書き換えます。テーマが格納されているフォルダを対象にgrep置換すれば大丈夫です。

また、jQueryなどの外部ファイルのパスがhttp://になっている場合も、https://に書き換えます。

手順5. エディタで記述した内部リンクのパスを書き換える

手順4で内部リンクをhttps://に書き換えましたが、書き換えられたのはテーマのファイルに直接記載されている内部リンクのみです。

WordPressのエディタで記述した内部リンクや画像のリンクは、「Search Regex」プラグインを使ってhttp://からhttps://に一括置換します。

  1. 「Search Regex」プラグインをインストールし、有効化します。
  2. [ツール]→[Search Regex]を選択します。
  3. [Search pattern]にhttp://〜、[Replace pattern]にhttps://〜を入力します。
  4. [Replace]ボタンをクリックすると置換前と置換後のソースコードが表示されます。
  5. 問題が無ければ[Replace & Save]ボタンをクリックして、置換後のソースコードをデータベースに反映させます。

手順6. WordPressのURL設定を変更する

  1. [設定]メニュー→[一般]を選択します。
  2. 「WordPressアドレス」と「サイトアドレス」のhttphttpsに書き換えます。
  3. [変更を保存]ボタンをクリックします。

手順7. リダイレクト設定をする

.htaccessファイルにhttpsへの301リダイレクト処理(1〜5行目)を記述します。

記述する位置は# BEGIN WordPress(7行目)の上です。この位置を間違えると、正常にリダイレクトされないです。


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

作業後の確認

httpsにリダイレクトされるか

http://〜からhttps://〜にリダイレクトされるかをチェックします。手順を間違えると、TOPページはリダイレクトされるのに、下層ページはリダイレクトされないということが起こります。そのため、TOPページだけでなく下層ページのチェックもしておきましょう。

混合コンテンツ(mixed content)が発生していないか

混合コンテンツについて、Google Developersでは次のように記述されています。

最初のHTMLが安全なHTTPS接続で読み込まれ、その他のリソース(画像、動画、スタイルシート、スクリプトなど)が安全ではないHTTP接続で読み込まれると、混合コンテンツが発生します。これが混合コンテンツと呼ばれるのは、同じページを表示するためにHTTPとHTTPS両方のコンテンツが読み込まれているためで、最初のリクエストはHTTPSで保護されています。

混合コンテンツとは | Web | Google Developers

HTTPSページ上でスクリプト・スタイルシート・iframeなどのリソースをHTTP接続で読み込もうとする場合(能動的な混合コンテンツの場合)、中間者攻撃のリスクが高くなります。そのため、多くのブラウザでは能動的な混合コンテンツはブロックされます。

例えば、下記のようにjQueryをHTTP接続で読み込もうとすると、能動的な混合コンテンツとみなされ、読み込まれません。


<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

この場合、jQueryライブラリやjQueryで記述した処理は実行されません。

混合コンテンツが発生していないか、Chromeの開発者ツールなどを使って調べることが必要です。

参考サイト