エックスサーバーの無料独自SSLをサイト移転前に設定する方法
はじめに
エックスサーバー・スターサーバーの無料独自 SSL 設定をサイト移転前に設定し、SSL で接続できなくなる問題を回避する方法を紹介します。
※スクリーンショットはスターサーバーの管理画面ですが同じ業者であるエックスサーバーでも同様に設定可能です。


サイト公開しないと無料独自 SSL 設定ができない
当ブログはMixHostからスターサーバーへ移転しました。移転時に一番問題だと感じたのが、サイトをスターサーバーで公開しないと無料独自 SSL 設定ができないため、一定時間 SSL が使用できないダウンタイムが存在してしまうことでした。
スターサーバーにドメイン追加後、SSL 設定より「無料独自 SSL 追加」を行ってもエラーが発生したと表示され設定ができません。

この状態でネームサーバーの設定を変え新サーバーにアクセスが行ってしまうと、SSL 検証エラーとなり、SSL を設定するまでの間ダウンタイムとなってしまいます。また、HOSTS ファイルを使用して新サーバーでの動作確認も行えません。

SSL 設定時の認証
エックスサーバーやスターサーバーの「無料独自 SSL」は「Let's Encrypt Authority X3」を使用しています。認証は Let's Encrypt が行っています。
Let's Encrypt の Web 認証では、http://example.com/.well-known/acme-challenge/ の直下に Let's Encrypt から指示された認証用一時ファイルを設置し、存在が確認されることで行われます。
エックスサーバーやスターサーバーでも「無料独自 SSL 追加」を行うと設定するサーバーの /.well-known/acme-challenge/ の直下に認証用一時ファイルを設置しています。
User Guide The Let’s Encrypt project — letsencrypt latest documentation
https://letsencrypt.readthedocs.io/en/latest/using.html
移転前動作確認 URL でも認証ファイルにアクセスが可能
認証を通すためにはエックスサーバーやスターサーバーに設置された認証用一時ファイルへアクセスできるようにする必要があります。
エックスサーバーやスターサーバーには「移転前動作確認 URL」という機能があり、この機能で作成された URL でも /.well-known/acme-challenge/ にアクセスが可能になっています。
動作確認について | レンタルサーバーならエックスサーバー
https://www.xserver.ne.jp/manual/man_domain_checkproxy.php
移転前動作確認URL | レンタルサーバー【スターサーバー】
https://www.star.ne.jp/manual/domain_checkproxy.php
対処方法
- 「移転前動作確認 URL」の設定から動作確認 URL を入手します。

-
移転前のサーバーに /.well-known/acme-challenge/ までのフォルダを作成します。
-
/.well-known/acme-challenge/ の直下に次の .htaccess ファイルと index.php を設置します。
index.php
http://masshiro-blog.check-star.jp/(アクセスされたURL) にデータを取得しに行き、そのまま返すプログラムです。
URL は /.well-known/acme-challenge/(英数字-_) 以外の場合弾くようにしています。
http://masshiro-blog.check-star.jp/ の部分は移転前動作確認 URL に置き換えてください。
<?php
$url = $_SERVER['REQUEST_URI'];
if(preg_match('/^/.well-known/acme-challenge/[a-zd-_]+$/i', $url)):
$cp = curl_init();
curl_setopt($cp, CURLOPT_URL, 'http://masshiro-blog.check-star.jp/' . $url);
curl_setopt($cp, CURLOPT_RETURNTRANSFER, true);
echo curl_exec($cp);
curl_close($cp);
else:
exit();
endif;
?>
.htaccess
WordPress でもお馴染み、直下へのすべてのアクセスを index.php に転送するプログラムです。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?/$1 [L]
</IfModule>
4.SSL 設定より「無料独自 SSL 追加」を行う。

- index.php 及び.htaccess を削除する。