続・さくらのレンタルサーバをCloudflareのSSL証明書で使う

あまりにも簡単だと思ったらやはり落とし穴があった。← リンク先の記事はゴミなので読まなくていいです

フレキシブルモード

Cloudflare のプロキシサーバが SSL 通信を代行してくれるような感じ。つまりエンドツーエンドの暗号化通信ではない。 SSL が有効になっているように見えるだけにむしろタチが悪い。

つまりブラウザと Cloudflare 間は暗号化されるが、Cloudflare とさくら(オリジンサーバ)間は暗号化されない。そもそもさくらのサーバは SSL が有効になっていないし。

[ブラウザ] ---🔐--- [Cloudflare] ---❌️--- [さくら]

逆に SSL を有効化できないサーバ(今時そんなのがあるのかという気もするけど)に対しても暗号化通信が可能(のように見える)。現実的な危険性がどのくらいあるのかわからないけど、本番環境で使うのはやめておいたほうがよさそう。

フル(厳密)モード

結局、オリジンサーバでも SSL を有効にしないといけない。Cloudflare 経由の場合は証明書をインストールする必要がある。

オリジン証明書を取得する

  1. Cloudflare のドメインのページから
  2. SSL/TLSオリジン サーバー
  3. 証明書を作成 ボタン
  4. デフォルトのまま 作成 ボタン

オリジン証明書と秘密鍵が表示されるので保存しておく。秘密鍵は再表示できないので注意(忘れたら再び証明書を作成することになる)

構成ルールを設定する

今回は特定のサブドメインのみ「厳密」モードにしたい。よってドメイン全体で「厳密」モードにするのであれば、この項目は無視してよい。

  1. Cloudflare のドメインのページから
  2. ルール構成ルール
  3. ルールを作成 ボタン

ルールの詳細を入力する。

サーバにオリジン証明書をインストールする

  1. さくらのコンパネから ドメイン/SSL
  2. 設定したいドメインの 設定 プルダウン → SSL設定
  3. 緑色の 登録設定を始める(略) ボタン
  4. 独自SSL利用する ボタン

ここからがやっと本番。

秘密鍵の登録

先に Cloudflare で作成したオリジン証明書の秘密鍵を登録する。なぜかコピペできないので適当なファイルに保存してアップロードする。

SSL 証明書インストール

こっちはオリジン証明書のこと。コピペできるので貼り付ける。秘密鍵と正しいペアでない場合は文句を言われて登録に失敗する。

中間証明書インストール

さくらはこれが必須らしいので Cloudflare から貰ってくる

下の「Cloudflare Origin RSA PEM」からダウンロードして中身を貼り付ける。

確認

「フレキシブル」ではないことを確認する。以下の index.php を作成してサーバに置く。

<?php
echo $_SERVER['SERVER_PORT'], PHP_EOL;

443 なら成功、もしフレキシブルモードだと 80 と表示される。

おわりに

やはり面倒な手順を踏むことになった。そりゃそうだ。