LoginSignup
1
1

エックスサーバーの無料独自SSLをサイト移転前に設定する方法

Last updated at Posted at 2024-03-03

エックスサーバー・スターサーバーの無料独自SSL設定をサイト移転前に設定し、SSLで接続できなくなる問題を回避する方法を紹介します。

※スクリーンショットはスターサーバーの管理画面ですが同じ業者であるエックスサーバーでも同様に設定可能です。

※ これは2019-01-01に個人ブログで公開した記事を移植し、CC0-1.0で提供しています。情報は古い可能性があります。

サイト公開しないと無料独自 SSL 設定ができない

当ブログはMixHostからスターサーバーへ移転しました。移転時に一番問題だと感じたのが、サイトをスターサーバーで公開しないと無料独自SSL設定ができないため、一定時間SSLが使用できないというダウンタイムが存在してしまうことでした。

スターサーバーにドメイン追加後、SSL設定より「無料独自SSL追加」を行ってもエラーが発生したと表示され設定ができません。

スターサーバー管理画面の無料独自SSL追加時にエラーが発生

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

Google Chrome のSSLエラー 「この接続ではプライバシーが保護されません」

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/ の直下に認証用一時ファイルを設置しています。

移転前動作確認 URL でも認証ファイルにアクセスが可能

認証を通すためにはエックスサーバーやスターサーバーに設置された認証用一時ファイルへアクセスできるようにする必要があります。

エックスサーバーやスターサーバーには「移転前動作確認URL」という機能があり、この機能で作成されたURLでも /.well-known/acme-challenge/ にアクセスが可能になっています。

対処方法

  1. 「移転前動作確認URL」の設定から動作確認URLを入手します。

「移転前動作確認URL」の設定から動作確認URLを入手します。

  1. 移転前のサーバーに /.well-known/acme-challenge/ までのフォルダを作成します。

  2. /.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>
  1. SSL設定より「無料独自SSL追加」を行う。

SSL設定より「無料独自SSL追加」を行う。独自SSLを追加しましたのメッセージが表示される

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1