エックスサーバーでの独自SSLは簡単かつ格安
2016/03/05
このたび、新しいサイトを立ち上げることになったのですが、
SSL化してhttpsでの接続が出来るページのほうが、SEO的に有利だという話を聞いたりもします。
同じような内容の記事があれば、SSL化しているページのほうが上位にくる、といった程度の効果だそうですが、勉強にもなりそうなので新サイトはhttpsで作成してみることにしました。
結論からいうと、簡単すぎて全く勉強にはなりませんでした。
ただし、SSL自体の注意点やエックスサーバーにおけるcurlの問題点などもありました。
追記(3/5): 現在ではphp-7.0 もしくはphp-5.6では修正されています。
SSL化を検討している人は参考にして頂ければと思います。
エックスサーバーでのSSL
エックスサーバーには共有SSLと独自SSLの2つのサービスがあります。
共有SSLは無料ですが、ssl-xserver.jpのサブドメインとしてアクセスすることになり、独自ドメインは使えなくなるので、基本的に独自SSLを使用することになります。
エックスサーバーでは外部で取得したSSL証明書の持ち込みには対応しておらず、エックスサーバー内でSSL証明書を契約する必要があります。
エックスサーバーのSSLのブランド
CoreSSL、SecureCore、ラピッドSSL、ジオトラスト、グローバルサインの5つから選べます。
グローバルサイン、ジオトラストなど聞いたことのある有名なところは年間14000円かかりますが、CoreSSLなら年間1000円でしかも今なら初年度無料キャンペーン中です。
ここは迷わずCoreSSLにしました。
エックスサーバーのSSLプラン
SNI SSL(ネームベース)とIPアドレスベースのプランがあります。
IPアドレスベースにすると初期費用8000円、年額6000円と、結構なコストがかかります。
SNI SSLにすると初期費用や利用料が無料になりますが、比較的新しい技術なのでブラウザのバージョンによっては接続できないこともあります。
SNI SSL(ネームベース)に対応するWebブラウザについて
SNI SSL(ネームベース)の主要な対応ブラウザは以下です。
Internet Explorer7 (Windows Vista)以降 ※WindowsXPは非対応です。
Mozilla Firefox 2.0 以降
Google Chrome 6 以降
Safari 3.0 以降
iOS 4以降のMobileSafari
Android 3以降のAndroidデフォルトブラウザ
Windows Phone 7以降
WindowsXPのInternet Explorerが非対応というのが若干気になるところですが、このブログのアクセスを見ると大体0.4%程度のようです。
IPアドレスベースは、とりあえず使ってみるには結構なコストがかかるので選択肢としてはなく、SNI SSLにするSSL化しないかの二択でしたが、SSL化してみたかったので、0.4%の人には閲覧を諦めてもらうことにしました笑。
エックスサーバーでのSSLの申し込み
SSLの申し込みはインフォパネルから行います。
マニュアルに詳細が書かれていますが簡単に説明します。
SSL証明書の購入
「追加のお申し込み」というメニューから「SSLの新規取得」を 選びます。
次の画面でブランドとプランを選びます。
あとで指定もできますが、ここで使用するドメインを選択します。
SSL証明書はサブドメインごとに必要ですが、wwwありとなしと両方アクセスしたい場合はwwwありで申請すれば両方でアクセスできるようになります。
SSL証明書の取得申請
料金の支払い(Core SSLキャンペーンの場合は必要なし)をすませれば、次は「ご契約一覧」から取得申請を選び、登録者情報などを入力します。
ドメインを購入時に決めていなくても、ここで最終的に選択できます。
認証方法はCoreSSLであればDNS認証というのを使うことができ、DNSをエックスサーバーにしていれば自動的に認証されます。
そうでない場合はメール認証となります。
SSL証明書のインストール
SSL証明書のインストール等は全てエックスサーバーでやってくれます。
そのため全くSSLの勉強にはなりませんでした。
インストールが完了するとメールが届き、その後30分程度で使えるようになります。
SSLにする際の注意点
読み込むリソースは全てhttpsで
サイトをSSLにすると、読み込むリソースは全てSSLで読み込むようにしないとブラウザでアクセスした際に、警告が表示されてしまいます。
具体的には画像やjavascriptなどsrc=””で指定しているURLは全てhttps://に変えないといけません。(もしくは//で始めるプロトコル相対URLにする)
SNSなど大体のサービスはhttpsでのアクセスに対応していますが、対応していないのはアフィリエイトの画像です。
国内のASPで対応しているところは私が知る限りではありません。(アフィリエイトではないですが、Adsenseは対応しています)
一応URLを一旦自サイトのものに変え、リバースプロクシを使用したり、phpでcurl経由で取得したりすることで、対応することはできますが、画像のURLを変更していまうので、規約に抵触する可能性はあります。
レンタルサーバーだとProxyReversPassを設定できない、プロキシ経由だとインプレッション計測用の画像を取得させないASPもあるのでやるならphpで取得することをお勧めします。
エックスサーバーのcurlはSNI SSLに対応していない
追記(3/5): 現在ではphp-7.0 もしくはphp-5.6では修正されています。
問題がある場合は、phpのバージョン変更をしてみてください。
エックスサーバーにインストールされているcurlは7.15.5でSNI SSLに対応していません。
このバージョンがリリースされたのは2006年のことなので、実に10年前のバージョンです。
WordPressの大体の機能は問題なく動くのですが、自分のサイトのリソースにwp_remote_getやcurlでアクセスしようとすると以下のようなエラーがでてしまいます。
SSL: certificate subject name ‘*.xserver.jp’ does not match target host name ‘hostname’
自サイトのリソースにリモートアクセスする必要はあまりないですが、WordPress4.4でサポートされたブログカードのembed機能で自サイトのページを埋め込むときや、一部プラグイン(SiteGuardの画像認証機能)でアクセス権のチェックに使われていたりします。
サポートにcurlのバージョンアップを頼んでみましたが、アップデートの予定はない、と言われてしまったので、社長の小林様のブログにコメントしてみたりもしました。
追記(2/25): 早速対応して頂けたようです。ありがとうございます。
さっさとバージョンアップしてほしいのですが、以下をfunction.phpに書いておけばとりあえずは動きます。
add_filter( ‘https_local_ssl_verify’, ‘__return_false’ );
自サイトにアクセスする際にSSLのチェックが行われなくなります。