あまりにも簡単だと思ったらやはり落とし穴があった。← リンク先の記事はゴミなので読まなくていいです
フレキシブルモード
Cloudflare のプロキシサーバが SSL 通信を代行してくれるような感じ。つまりエンドツーエンドの暗号化通信ではない。 SSL が有効になっているように見えるだけにむしろタチが悪い。
つまりブラウザと Cloudflare 間は暗号化されるが、Cloudflare とさくら(オリジンサーバ)間は暗号化されない。そもそもさくらのサーバは SSL が有効になっていないし。
[ブラウザ] ---🔐--- [Cloudflare] ---❌️--- [さくら]
逆に SSL を有効化できないサーバ(今時そんなのがあるのかという気もするけど)に対しても暗号化通信が可能(のように見える)。現実的な危険性がどのくらいあるのかわからないけど、本番環境で使うのはやめておいたほうがよさそう。
フル(厳密)モード
結局、オリジンサーバでも SSL を有効にしないといけない。Cloudflare 経由の場合は証明書をインストールする必要がある。
オリジン証明書を取得する
- Cloudflare のドメインのページから
SSL/TLS→オリジン サーバー証明書を作成ボタン- デフォルトのまま
作成ボタン
オリジン証明書と秘密鍵が表示されるので保存しておく。秘密鍵は再表示できないので注意(忘れたら再び証明書を作成することになる)
構成ルールを設定する
今回は特定のサブドメインのみ「厳密」モードにしたい。よってドメイン全体で「厳密」モードにするのであれば、この項目は無視してよい。
- Cloudflare のドメインのページから
ルール→構成ルールルールを作成ボタン
ルールの詳細を入力する。
- ルール名 : てきとうに
- 受信リクエストが一致する場合 : カスタムフィルタ方式
- フィールド : ホスト名
- オペレーター : 等しい
- 値 : サブドメイン(test.example.com など)
- 次に設定内容は : いちばん下の SSL
- SSL/TLS 暗号化モードの選択 : 厳密
サーバにオリジン証明書をインストールする
- さくらのコンパネから
ドメイン/SSL - 設定したいドメインの
設定プルダウン →SSL設定 - 緑色の
登録設定を始める(略)ボタン 独自SSLの利用するボタン
ここからがやっと本番。
秘密鍵の登録
先に Cloudflare で作成したオリジン証明書の秘密鍵を登録する。なぜかコピペできないので適当なファイルに保存してアップロードする。
SSL 証明書インストール
こっちはオリジン証明書のこと。コピペできるので貼り付ける。秘密鍵と正しいペアでない場合は文句を言われて登録に失敗する。
中間証明書インストール
さくらはこれが必須らしいので Cloudflare から貰ってくる。
下の「Cloudflare Origin RSA PEM」からダウンロードして中身を貼り付ける。
確認
「フレキシブル」ではないことを確認する。以下の index.php を作成してサーバに置く。
<?php
echo $_SERVER['SERVER_PORT'], PHP_EOL;
443 なら成功、もしフレキシブルモードだと 80 と表示される。
おわりに
やはり面倒な手順を踏むことになった。そりゃそうだ。