このブログは今後は更新されません。FE.labsにてWordPress向けの記事も更新してゆきますのでよろしくお願いします。
今後このドメインは、ファーストエレメントのWordPress関連業務のブランドサイトとして近くリニューアルする予定です(2012/8/24)。
カテゴリ&タグ&カスタムフィールド&年月&キーワードで絞り込み検索ができるプラグイン『FE Advanced Search』

SSLをpublic_htmlでも有効にするには。

SSLがよく分かっていなかった。もちろん仕組みや機能はわかってるが、何を持ってSSL通信が成立するのか、技術的なことや設定に関してほとんど触ったことがないのでハッキリとは分からず、もやもやしていた。

なぜ悩むかといえば、サーバによってSSLディレクトリにコンテンツを置かなくてもSSL通信ができるサーバ / できないサーバがあるからだ。

例えば、よく使う「エックスサーバーではSSL用のディレクトリが用意されているが、そこにコンテンツがなくても、public_htmlフォルダ内のコンテンツでSSL通信ができる。一方、最近触った「ファーストサーバー|ウルトラビジネス2」では、SSLディレクトリにコンテンツがないとSSL通信できない。たしか、以前触った「C’S SERVER Personal」も同様。

もっと具体的に言えば、WordPressの”ページ”機能で作成した “お問い合わせフォーム” から入力された個人情報をSSLで暗号化して送信したい。その時に有効なプラグインが「Admin SSL」だが、ファーストサーバーの場合 https でアクセスするとSSLディレクトリを読みにいってしまい、そこにはWordPressのセットがないので「Not Found」になってしまうのだ。これは当然な結果に見える。

しかしエックスサーバーの場合、(共有SSLではあるが) Admin SSLがうまく働いてログイン画面などでSSL通信できる。SSLディレクトリは空であり、かわりにpublic_html内に置いたWordPressのログイン画面がロードされる。(Admin SSLの仕様で、お問い合わせフォームなどAdmin以外のページは独自SSLでないとSSL化できない)

また、静的なHTMLファイルでも(つまりAdmin SSLに頼らなくても)、エックスサーバーではpublic_htmlフォルダのコンテンツでSSL通信できている。

それで、少しGoogleで調べてみて分かったこと、思ったことは、

  1. Apacheウェブサーバの設定ファイルであるhttpd.confだけでなく、ssl.confという設定ファイルもあり、そこにSSLのドキュメントルート(Document Root)が記述されている。
  2. そのドキュメントルートをhttpd.confのそれと同じにすればうまくいくのではないか。
  3. そのドキュメントルートの設定が、レンタルサーバによって様々なのではないか?

このことは、次に試した手順で確信に変わった。別途試用している「使えるねっと|LinuxVPS|シルバー」の管理パネル「Plesk」を触っていて、決定的なパラメータを見つけた!

Plesk Control Panel のSSL設定

Plesk Control Panel のSSL設定

赤枠で囲った箇所、
SSL認証を受けないコンテンツと同じディレクトリに、SSL認証を受けるコンテンツを設置する
このチェックをオン/オフしてみたところ、見事に想像したどおりの動作となった。

  • チェックを付ける → public_htmlに置いたWordPressのお問い合わせフォームをSSL化できる!
  • チェックを外す → SSLディレクトリを読みにいってしまい、 Not Found 

SSL通信する際にSSLディレクトリに限定したほうがセキュリティは高いのだろうか…(感覚的にはそう思える)。しかし、少なくともWordPressで作成したお問い合わせフォームをSSLで暗号化する場合は、public_htmlディレクトリでもSSL通信できる設定でないと現実的ではない。

現実的ではない、とはつまりお問い合わせフォームをSSL化するためにいずれかの対応が別途必要になる。

  • メール送信スクリプトを別途用意して、SSLディレクトリに設置する
  • SSLディレクトリにpublic_htmlディレクトリに設置したWordPressと同じセットを置いてSSL接続の”受け皿”にする

こういうことが必要になり、せっかくWordPressでCMSを構築しても片手落ちである。例えば「 My Category Order 」というプラグインがあれば、クライアントの担当者自らサイドバーのカテゴリの並び順を変えられてかなり好評だが、SSLディレクトリに設置したお問い合わせフォームのサイドバーは手作業で編集しなけらばならない(デザインをWP側と統一するならば)。またWordPressのセットをSSLディレクトリに複製すれば上記の手間はなくなるが、セットを2つ管理するというのもスマートじゃないし弊害があるかもしれない。

このようなことから、WordPressでウェブサイト/企業サイト/CMSを構築する際に選ぶサーバのポイントが新たに1つ加わった。

public_htmlでもSSL通信できるサーバ

このようなサーバなら、お問い合わせフォームをWordPressで作成・管理しつつSSL対応できる。そしてそれを実現してくれるサーバ選択のわかりやすいポイントは「Plesk Control Panelを備えたVPSサーバ/専用サーバ」である(笑)…上でテストしたとおり。しかしVPSの安いプランは自由度が高いかわりにメモリが少なかったり、性能面では注意が必要。例えば上で紹介した「使えるねっと…シルバー」はメモリが512MBである。レスポンスも良いとは言えない。

共有レンタルサーバーの場合、SSLがpublic_htmlで使えるかどうかなんてことはWebには書いてないと思うので、個別に確認する必要があるでしょう。

もちろん自前サーバならどうにでもなる。自分でPleskをインストールしてもいいしssl.confを見つけて触ればよいでしょう…あ、ssl.confのDocument Rootかどうかは検証できていないけど。。。

以上、今日確認したばかりの内容で、間違い・誤解・勘違いがある可能性もありますが、もし気付かれた方はご指摘くだされば幸いです。

参考サイト)

このエントリーをはてなブックマークに追加

11件のコメントがありますコメントのRSSフィード

  1. wordpressをいじるようになってから、いつも参考にさせていただいております。
    質問させていただきたいのですが、
    今、wordpressを使ってポータルサイトを作成しようと思っています。(初心者ながら)
    まだ、wordpressについて基本的なことはあまりよくわからないのですが、
    例えば、お店の紹介などを固定ページで一店舗づつページを作成するとします。
    そして、時系列ページでお店のイベントや新着情報などを、投稿者権限でお店の方に
    投稿してもらうとすると、トップページに新着リンクが自動的にでるようにしても、
    その時系列ページしか表示されませんよね?

    できれば、そのお店の固定ページ内に毎回更新した内容を表示して、
    トップページの新着一覧から、そのお店のページへリンクさせることは可能なのでしょうか?

    長文、しかもわかりづらくて申し訳ございません。
    上記内容以外にも、なにかいい方法がありましたらぜひご教示いただきたいと思います。

    失礼いたしました。

  2. みやざわ より:

    まこっちゃんさん、ようこそ。

    こういうときは「query_posts」というテンプレートタグを使います。
    トップページのif(have_posts())…..の手前に、

    query_posts($query_string.”&post_type=any”)

    という一文を加えてみて下さい。
    通常、暗黙で”post”となっているものを”any”とすることで”page”も含めて呼び出せます。
    あたまの$query_stringというのはページ分割を機能させるためです。
    query_postsを実行すると、その時点でページ情報がリセットされてしまうのですが、$query_stringをつけることでページ情報を継承できます。

    query_postsの解説は、日本語Codexより英語Codexのほうが詳しく解説されています。
    http://codex.wordpress.org/Template_Tags/query_posts

    【追記】
    ちょっとやりたいことが違っていましたね…。
    トップページではpost_type=pageにする。
    個別店舗ページにもquery_postsを設置して、
    $author_id = $post->post_author;
    query_posts(“author=$author_id”);
    でいいんじゃないでしょうか?

  3. 早い対応ありがとうございます。とても感謝いたします。
    自信はありませんが、まずは言われたようにやってみます。

    お店の方には、お店の詳細ページを更新してもらって、更新されたものを
    トップページに(題名リンク)表示させる、という理解でよろしいでしょうか?

    私がやりたいのは、
    YAHOOトップページ上段真ん中にあるニューストピックスのように
    更新されたお店の題名リンクを10件くらい表示させて、そのリンクから
    お店の詳細ページに飛ばしたい、ということなんですが、可能でしょうか?

    何度もすいません。ご丁寧な対応、感謝いたします。

  4. みやざわ より:

    なるほどなるほど。
    それなら$query_stringはいらないですね。

    query_posts(“post_type=page&orderby=modified&showposts=10″);
    if(have_posts())…..

    でしょうかね。上の記述例は、
    「ページでつくられた記事を更新された順に10件取得」
    という意味になります。

  5. みやざわ様へ

    遅ればせながら、迅速な回答ありがとうございました。

    なにぶんスキル不足なもので、時間がかかるかもしれませんが、
    回答いただいた内容を実践したいと思います。

    これからもちょくちょくブログ拝見させていただきますので、
    よろしくお願いいたします。

  6. おかげさまで、骨組みを作ることができました。ありがとうございます。

    そこでまた質問させていただきたいのですが、
    検索フォームを設置する場合、ウィジェットを使用しなければ、設置することはできないのでしょうか?

    ヘッダーと、カテゴリ一覧のページ内で使用したいと思っています。

    何度もすみませんが、ご教示願います。

  7. みやざわ より:

    挿入したい場所に
    <?php include (TEMPLATEPATH . “/searchform.php”); ?>
    と書けば設置できますよ。
    テーマフォルダ内に searchform.php というファイルがあると思いますが、
    そのファイルを読み込んで表示します。

    あるいは、その中身を丸ごと、挿入したい場所に入れればそれでもいいと思います。

  8. ありがとうございます。さっそくやってみます。

    ただ今、カテゴリ一覧ページに四苦八苦しております(汗)
    親カテゴリと子カテゴリをどう表示させようかと・・・

    wordpressって奥が深いですね^^癖になりそう。

    頑張ってみます。何回もご指導いただきありがとうございました。

  9. みやざわ より:

    >wordpressって奥が深いですね^^癖になりそう。

    はい、癖になって3年来です(–;)
    ウェブサイトつくる時は仕事も趣味も「まずWordPressありき」に偏っています、確実に(汗
    まぁ意図的にWordPressに絞ってノウハウを貯めて差別化図っているんですが。。。

    でもそれだけハマれる懐の深さがありますよ〜WordPressには。

    WordPressにハマると、PHPが読み書きできるようになる、という効果もあります。
    そしてPHPが読み書きできるようになると、JavaScriptも簡単に見えてくるから不思議。芋づる式。
    (WordPress触る前なんて、ろくにPHPのコード”読んだ”ことすらなかった)

    時間かける価値はあるのでがんばってください。

コメント/質問お待ちしています

トラックバックURL:
http://wpcms.jp/490/trackback/

CATEGORY

ARCHIVE

2017年9月
« 12月    
 12
3456789
10111213141516
17181920212223
24252627282930