サイトのSSL化について(さくらインターネット)

サイトのSSL化をするのに想像以上に試行錯誤しました。備忘録としてだけでなく、今後SSL化を検討している人たちの有益なネタとなれば幸いと情報を載せたいと思います。
また、こちらはさくらインターネットのレンタルサーバーで運営しているサイトのSSL化についての情報となります。そして、WebサイトはWordPressを使って作成しています。

まずはSSL化をするサイトの構造は以下と想定します。例としてサイトドメインはwww.sample.comとしてWordPressで作成、そのドメインのサブディレクトリ配下にももう1つWordPressで作成したサイトがあることを想定します。
site

サイトはすでにhttp://で運営中のものをSSL化(https://)します。ここではSSLの説明はしません。また、さくらインターネットで証明書の発行〜インストールすること想定しています。
さくらインターネットでの基本手順は以下です。

ssl_flow

ちなみにラピッドSSLでの契約であれば、サービスの管理コンソールを使うと証明書の発行やインストールを自動で行ってくれます。
また、説明のための例としてここでは「www.sample.com」ドメインに証明書を発行したものとします。

そしてここからが本ネタになります。SSLを有効化してWordPressの設定を変えれば完了と思っていたのですが試行錯誤しました。複雑な設定はしていないので、ただ知らなかった故に試行錯誤していたのだと思います。。なのでこの情報が貴重な時間を節約する一助になれば幸いです。

SSL化するドメインはマルチドメイン設定(www有無のどちらもアクセス可)になっていることを前提としています。ここでややこしいのが、SSL証明書は「www.sample.com」で発行しているので、理屈としてはSSLが有効なサイトは「www.sample.com」となります。が、マルチドメイン設定によって「sample.com」でもアクセス可能になっているので、結果として「https://sample.com」でもアクセスできるようになってます。はじめはマルチドメイン設定を外して構築したのですがどちらのURLでもアクセスできなくなったので、現在はこの設定を有効にしています。ですが、「www.sample.com」へリダイレクトする設定がないとアクセスできません。(正直なところ理由は分かりません)

設定変更の必要な項目を列挙すると以下となります。

  • WordPressの設定とSQLデータベースの変更
  • .htaccessへの記述追加
  • wp-config.phpへの記述追加

WordPressの設定とSQLデータベースの変更

SSL化するとプロトコルの記載がhttps://となるのでWordPressの一般設定にある2つの項目も変更します。

  • WordPress Address (URL)
  • Site Address (URL)

例:http://www.sample.com → https://www.sample.com
また、これに合わせてSQLデータベースにあるもろもろの情報もhttp://からhttps://に変更します。
これを変更するには以下のスクリプトがとても便利です。(プロトコルを除いた相対パスの記述にしている方は必要ないかも知れません。)
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

.htaccessへの記述追加

これが厄介でした。。基本的にはこれまで同様http://でのアクセスに対するリクエストが来ても継続して接続可能とするために、301リダイレクトの設定を記入するのですが、いわゆる普通のリダイレクト設定を記入してもアクセスできません。詳細についてはページ最後にあるサイトを参考にしてください。
ということで詳細を端折ってうまくいった設定だけを記載します。さくらインターネットでは環境変数を使ってwww有無のドメイン切り替えを行っているようで以下の様な記述になっています。この設定を.htaccessファイルの先頭に追記します。

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

もしうまくいかなかった場合は以下を試してみてください。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$
RewriteRule ^(.*)$ https://www.sample.com/$1 [R=301,L]
</IfModule>

(私の場合はどちらも接続できました。)

【重要】この例にあるサイト構成の場合、「www.sample.com/sub」に作成したWordPressの環境にある.htaccessには設定しないでください。リダイレクト過多によりアクセスできなくなってしまいます。WordPressの環境がサブフォルダにしかない場合は設定する必要があると思います。

wp-config.phpへの記述追加
WordPressの設定ファイルに「www.sample.com」へのリダイレクト設定を記入します。

if( isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR']) ) {
     $_SERVER['HTTPS'] = 'on';
     $_ENV['HTTPS'] = 'on';
     $_SERVER['HTTP_HOST'] = 'www.sample.com';
     $_SERVER['SERVER_NAME'] = 'www.sample.com';
     $_ENV['HTTP_HOST'] = 'www.sample.com';
     $_ENV['SERVER_NAME'] = 'www.sample.com';
 }
【重要】この設定は「www.sample.com/sub」に作成したWordPressの設定にも記入してください。

これでSSL化は完了です。
以下のサイトを参考にしました。
さくらSNI 独自SSLでドメイン全体をHTTPS化する
さくらでURL正規化を正しく行うSSLの設定方法

シェアする