ページへ戻る

− Links

 印刷 

XOOPS の SSL 対応 (http, https どっちでもOK) :: XOOPS マニア

UsersWiki:nao-pon/blog/2010-03-27


RSS of nao-pon/blog[5]
2010 3月 27 (土)
 
ページ内コンテンツ
  • XOOPS の SSL 対応 (http, https どっちでもOK)
    • SSL 証明書のインストール
    • XOOPS の調整
      • mainfile.php
    • class/template.php
    • テンプレートの調整

XOOPS[6] の SSL 対応 (http, https どっちでもOK) anchor.png[7]

Tag: XOOPS[8] 自宅サーバー[9] SSL[10]

気付いている人もいると思いますが、当サイトを SSL 対応としました。http でも https でもどちらでも同じページが表示されます。

曲がりなりにもログイン機能を有しているので、このご時世 SSL 対応にしないとと思い立ち、無料で証明書を発行してくれる(個人限定で1年間) StartSSL[11] を知ったので、設定してみました。

Page Top

SSL 証明書のインストール anchor.png[12]

を参考にサーバーの Apache を設定、StartSSL の場合、中間認証局の証明書 sub.ca.crt[15] も必須なので忘れずに設定する。

sub.ca.crt[15] は DER 形式(バイナリファイル)なので、次のように PEM 形式に変換する

mv sub.class1.server.ca.crt sub.ca.der
openssl x509 -inform der -in sub.ca.der -out sub.ca.crt

なお、Apache 1.3 での SSL は ひとつのIPでひとつのホストしか利用できないので、ネームベースのバーチャルホストではどれかひとつのホストに絞る必要があるので、xoops[6].hypweb.net 以外のホストは、http にリダイレクトさせています。(そもそも、接続前に証明書が不正だと警告が出るけどね)

Page Top

XOOPS[6] の調整 anchor.png[16]

Page Top

mainfile.php anchor.png[17]

XOOPS_URL を接続により切り替える。

    define('XOOPS_IS_SSL', (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'));
    if (XOOPS_IS_SSL) {
        define('XOOPS_URL', 'https://xoops[6].hypweb.net');
    } else {
        define('XOOPS_URL', 'http://xoops[6].hypweb.net');
    }
Page Top

class/template.php anchor.png[18]

サイト内リンクをきちんと区分けするため、http と https で、Smarty テンプレート利用時のコンテンツキャッシュを別にする。

class/template.php の XoopsTpl クラスに次のメソッドを追加し Smarty クラスのメソッドをオーバーライドする。

これは、XOOPS[6] 2.0.16a の場合だけど、XCL ではプリロードでいけるのかな。 :thinking:

    function clear_cache($tpl_file = null, $cache_id = null, $compile_id = null, $exp_time = null)
    {
        if (XOOPS_IS_SSL) {
            $cache_id .= '_SSL';
        }
        return parent::clear_cache($tpl_file, $cache_id, $compile_id, $exp_time);
    }
 
    function is_cached($tpl_file, $cache_id = null, $compile_id = null)
    {
        if (XOOPS_IS_SSL) {
            $cache_id .= '_SSL';
        }
        return parent::is_cached($tpl_file, $cache_id, $compile_id);
    }
 
    function fetch($resource_name, $cache_id = null, $compile_id = null, $display = false)
    {
        if (XOOPS_IS_SSL) {
            $cache_id .= '_SSL';
        }
        return parent::fetch($resource_name, $cache_id, $compile_id, $display);
    }
Page Top

テンプレートの調整 anchor.png[19]

$smarty.const.XOOPS_IS_SSL で SSL を判定できるので、適宜場合分けして SSL 側へのリンクなどを付ける。



Last-modified: 2010-03-27 (土) 11:42:24 (JST) (5818d) by nao-pon