MovableTypeの管理画面をSSLで接続可能にする小技 - httpsでもhttpでも接続したい場合(訂正して再掲)
mt-config.cgiの編集
MovableType の管理画面を SSL で接続可能にする方法です。
どうせなら全ての接続を HTTPS か HTTP に揃えてしまった方が楽なのですが、こんな方法もあるということで。
いずれも自己責任でお試しください。
mt-config.cgi
CGIPath http://example.com/mt/ AdminCGIPath /mt/ StaticWebPath //example.com/mt/mt-static/
■追記■
<$mt:StaticWebPath$>および<$mt:SupportDirectoryURL$>というMTタグが使われているテンプレートを使用すると上記の設定では不具合が起きるので、以下の対応をして解決しました。
少々面倒になってしまいましたので、無理して管理画面をSSL化しないほうがいいかもしれませんね。
当方の環境では SSL の設定を HSTS にしてしまいましたのでこのような対応となりました。
mt-config.cgi
CGIPath https://example.com/mt/ AdminCGIPath /mt/ StaticWebPath https://example.com/mt/mt-static/
上記のようにした上で、<$mt:CGIPath$>、<$mt:StaticWebPath$>、<$mt:SupportDirectoryURL$>に、グローバルモディファイア replace="https:","" を追加しました。
MT管理画面のシステムレベルから 検索 - 置換 で一括変更しましたが、MTに同梱されているテンプレートを使用している場合では、以下の6パターンの置換えが必要なようです(ご参考まで)。
<$mt:CGIPath$> -> <$mt:CGIPath replace="https:",""$> <$mt:StaticWebPath$> -> <$mt:StaticWebPath replace="https:",""$> <$mt:StaticWebPath encode_html="1"$> -> <$mt:StaticWebPath encode_html="1" replace="https:",""$> <$mt:SupportDirectoryURL with_domain="1" encode_html="1"$> -> <$mt:SupportDirectoryURL with_domain="1" encode_html="1" replace="https:",""$> <$mt:SupportDirectoryURL encode_html="1"$> -> <$mt:SupportDirectoryURL encode_html="1" replace="https:",""$> <$mt:SupportDirectoryURL$> -> <$mt:SupportDirectoryURL replace="https:",""$>
無理に https: を削除することも無いと思いますが、検索用のスクリプト(mt-search.cgi)を呼び出した時にhttpsとhttpが混在してしまうのを回避したい場合などには有効です。
どうやらMTの内部では、環境変数の CGIPath や StaticWebPath に代入された値が、http から始まる場合はそのまま、http 以外で始まる場合は、ブログURL を追加して出力しているようです。
従って、// から始まる絶対パスを設定すると、絶対パスとは認識されずにブログURLが追加されてしまい、http://example.com//example.com/mt/ という何とも情けないパスが出力されてしまっていました。
依存関係がわかっていれば、内部を直接いじるのも有りだと思います。
■追記ここまで■
スラッシュで始まる相対パスでリンクを書けば、現在接続中のプロトコルを引き継いで参照してくれます。
また、//で始まる絶対パスでリンクを書いても同様ですが、ドメインをまたいで参照することができます。
MTのこれらの環境変数は、
AdminCGIPath は mt.cgi へのリンクを生成するために使われます (CGIPath はその他すべての CGI スクリプトへリンクを生成するために使われます)。
AdminCGIPath | 環境変数リファレンス
というわけで、ページ出力時のリンク生成に使用されているようですから、これをスラッシュで始まる相対パスに変更してしまえば良いわけですね。
ちょっと前に、MovableTypeで // から始まるURL、スラッシュから始まる絶対パスを使う - HTTPSとHTTPを上手に使い分ける小技で書いた方法の応用です。
最初、AdminCGIPathも、//example.com/mt/ としたのですが、Chrome でアクセスすると、ページ遷移ごとにログインをしなければならない状態になってしまいました。おそらくクロスサイトスクリプティング対策で、接続中のページとFQDNの部分が違うとスクリプトなどが正しく動かないようです。記事をアップしたあとに Chrome の不具合に気がついたので、一度削除しての再アップです。*1
プラグインの互換性
プラグインはあまり入れてないので大した参考にはなりませんが、こちらの環境で https で接続してブロックされたのは、quickrebuild-mtpluginだけでした。
このプラグインは、MT6になってもちゃんと動きますし、とても重宝してまして*2、HTTPS環境でも使えるようにしたいということで、ちょっとだけいじくってみました。
修正するファイルは、mt/plugins/QuickRebuild/tmpl/mt-rebuild.js
エディタなどで開いて、http:// で検索すると、3ヶ所ほどみつかりますので、これをすべて'//'に置き換えてしまいました。*3
これで、https環境下でもちゃんと動いてくれました。
HSTSにしたので
昨日、SSLの設定をいじって、Header add Strict-Transport-Security を導入してしまったことで(SSLCipherSuite を変更し perfect forward secrecy にも対応してみる)、FirefoxとChromeでのアクセスが強制的にSSL接続になってしまいMTの管理画面がうまく表示されなくなってしまったため、ちょっと対応をしてみました。
今のところ、MT6ではちゃんと動いているようですが、いずれも自己責任でお試しください。