top

CORESERVERでMTのダイナミック・パブリッシングを常時SSL化

手持ちのサイトを一通り常時SSL化しました。MTのSSL化は難しくないですが、ダイナミック・パブリッシングを使っている場合、WordPressに似た罠にハマることがあるので覚え書きしておきます。CORESERVERの例ですが、XREAも同様にいけるかと。

■下準備■
ネットを見ているとSSL化してから慌てて混在コンテンツを直しにかかっているのが多いですが、それは順序が逆だと思います。SSL化する前に混在コンテンツ(httpsの中にhttpが混じる)を潰しておけば、SSL化してからの作業がぐっと楽になります。

●テンプレート
MTタグを使っているところはSSL化後の再構築でhttpsになるので問題ありませんが、たまに画像やスクリプトのアドレスを直接http://~から書いてる所があったりするんですよね。そこはMTタグまたは「/」で始まる相対パスに直しておきます。スクリプトを外部から読み込んでいる場合もhttpsに対応したものに差し替えておきます。CSS内の画像アドレス、javascript内にURL記述部分がある場合はそこもチェックを忘れないこと。

●記事
MTで普通に記事を書くと画像アドレスが<img src="http://example.com/hoge.gif">といったhttp://~から始まるURLアドレスになります。そのままではSSL化後に混在コンテンツの警告になりますので、検索・置換で「/」で始まる相対パスに直しておきます。

検索:src="http://example.com/
 ↓
置換:src="/

こうしておくと画像アドレスが<img src="/hoge.gif">となり、http・httpsどちらでも使えるようになります。なお、AssetRelativePathプラグインを使うと挿入画像のパスが「/」で始まる相対パスになるので便利です(6.3でも動いてます。7で動くかどうかは分かりませんが…)。

●広告
広告もhttpsに対応したものに差し替えます。httpからhttpsを読み込むのは問題ありませんから、先に片付けておきます。httpsに対応してない広告は諦めて外します。

●Amazonの画像
私の場合、実はこれが一番やっかいでした…。Amazonがhttpsに対応したのは最近のことなので、運営歴の長いサイトはそのほとんどがhttp画像。サイトやブログを始めて数年ならまだしも、2001年から運営してるとなると、古いAmazonの画像も膨大で、しかも古い画像はURLがバラバラで一括置換も出来ない。結局1つ1つ調べて差し替えていくという作業になり、これだけで1ヶ月かかりました(^^;。SSL化後にやったのでは到底間に合わないので、これだけでも先にやっておいてよかったと思います。

■SSL化■
準備が整ったらCORESERVERの新しい管理画面に行き、「サイト設定」からSSL化したいサイトに入り、「サイト設定の変更」から「無料SSL」を選び、ポチします。これでSSL化は完了。今までの苦労が何だったんだというくらい、簡単に済みます。ポチした後は焦らず10~15分待ってからhttpsでサイトを表示し、SSL化されているのを確認。
注:焦ってポチ直後にhttpsで開くとまだSSL化が間に合ってなくて悲しきエラー画面になります。落ち着いてコーヒーでも飲んでから開きましょう。

●MT管理画面のSSL化
mt-config.cgiのCGIPathとStaticWebPathをhttpsに修正。mt.cgiの場所がexample.com/mt/mt.cgiだった場合は以下のようになります。

CGIPath        https://example.com/mt/
StaticWebPath  https://example.com/mt/mt-static/

管理画面に入って「設定」→「全般」で公開パスのウェブサイトURLをhttpsに直します。アーカイブURLを設定している場合はそれもhttpsに直します。パスはそのままでOK。

180321.png

再構築すればSSL化は完了です。

●混在コンテンツのチェック
事前に準備しても抜けはあるものです。鍵マークが付かない頁を見つけたら原因を調べて直します。エラーの原因はたいがい src="xxx"で読み込まれているものです。img、script、iframeが怪しいのでチェック。formのaction=""も。ちなみに<a href="http://~は問題ありません。間違えないように。

●リダイレクト
よし、大丈夫だ!となったら、httpからhttpsへのリダイレクトを。.htaccessに以下を記述。

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

さて、静的生成の場合はこれでOKなんですが、ダイナミック・パブリッシングを使っている場合は少し注意がいります。

ケース1)サイト全体がMTの場合
ダイナミック・パブリッシングを使うとサイト直下にMTが.htaccessを書き出します。MTの書き出した.htaccessの一番最初に上の記述を入れます。

ケース2)サイト全体がMTでかつアーカイブURLを設定している場合
この場合はアーカイブに指定しているディレクトリ内にも.htaccessが書き出されています。そこにも上の記述をします。サイト直下の.htaccesだけではarchives以下にリダイレクトがききません。気をつけるように。

ケース3)サイトはDreamweaverなどで作り、サイトの一部にMTをブログとして使っている場合
サイト直下に上の記述をした.htaccessを設置。MTがexample.com/blog/なら、example.com/blog/下にMTの書き出した.htaccessがあるので、そこにも上の記述を追加。サイト直下の.htaccessだけではexample.com/blog/下にリダイレクトがききません。上のディレクトリに.htaccessが有る無いに関わらず、ダイナミックではMTの書き出した.htaccessにも漏れなくリダイレクト記述をする必要があります。

●HSTSの罠に注意!
HSTS(HTTP Strict Transport Security)とは一度でもhttpsにアクセスしたら次からは強制的にhttpsに飛ぶという機能です。CORESERVERはHSTSに対応しています。最近のブラウザもHSTSに対応しています。故にHSTSに対応しているブラウザでhttpsサイトを見ると、次回のアクセスからは強制的にhttpsに飛ぶようになります。.htaccessがなくても飛びます。そのため、実際にはリダイレクトされてないのに、あたかもリダイレクトされているかのように見えてしまいます。しかしリダイレクトされているのは自分のブラウザだけで、他人がアクセスするとhttpのままでhttpsになりません。SSL化が完了したら一度キャッシュを削除して.htaccessの動作を確認すること。なお、.htaccessに以下のように記述しておくと、HSTSを無効に出来ます。まだ調整中で勝手にhttpsに飛ばれては困るという時に設置しておくといいかも。

Header always unset Strict-Transport-Security
Header add Strict-Transport-Security "max-age=0"

これをしておくとhttpとhttpsのどちらでもアクセス出来るようになります。SSL化が完了して強制的に飛んでもよくなったら削除すればいいかと。

SSL化をすると思わぬ副作用に遭遇することもありますが(ランキングが効かなくなったりとか、古いサーチサイトがhttpsに対応してなかったりとか)、個人的にはこれでMTの管理画面が共有SSLからさよなら出来たのはよかったです。