Table of Contents
最近GitHub PagesがHTTPSに正式対応したというニュースを見たことをきっかけに、このブログをCloudflareで常時HTTPS化した話。
このブログ
このブログはGitHub Pagesでホストされている。
GitHub Pages上のWebサイトはデフォルトでは<GitHubユーザ名>.github.io
というドメインで公開されるが、ちょっとかっこつけたかったのでカスタムドメイン(www.kaitoy.xyz
)にした。
GitHub Pagesは2014年3月から非公式にHTTPSをサポートしていて、2016年6月8日に正式サポートを表明したが、これは<GitHubユーザ名>.github.io
ドメインだけが対象であり、カスタムドメインはHTTPSサポートされていない。
(2018/5/3追記: 2018/5/1にGitHub PagesのカスタムドメインのHTTPSサポートが発表された)
要するにこのブログにはHTTP接続しかできない状態だった。 これをなんとかHTTPSに対応させたかった。
なぜHTTPS
HTTPS化(常時SSL化)が世界的な流行りな雰囲気を感じていたのと、なにより、Googleに優遇してもらえるから。 Googleの検索結果の2,3ページ目までに出てこないなら、そのサイトはこの世に存在しないのとあまり変わらない。
昔はHTTPSにするとSSLプロトコルのオーバーヘッドや暗号化/復号化処理によりHTTPに比べて遅くなると言われていたが、最近ではサーバ/クライアントマシンの性能が上がり、このデメリットは気にするほどのものではなくなった。 逆に、常時SSL化するとSPDYやHTTP/2といった高速なプロトコルの恩恵を受けることができるようになり、HTTPより速くなることもあるらしい。
カスタムドメインなGitHub PagesサイトをHTTPS対応する方法
上記の通りこのブログはカスタムドメインでGitHub Pagesのサポートがなく直接にはHTTPS対応できない。 よって間接的に対応することになるので、リバースプロキシを使うことになる。 リバースプロキシサーバを自分で運用するのは大変なので、CDNサービスを利用する。
CDNサービスでまず思い当たったのはAWSのCloudFrontだけど、なんだか大げさで面倒そう。 あとはCloudflareが有名なので調べたところ、手軽で無料でよさそうだったのでこれにした。
因みに、ごく最近始まったサービスのKloudsecというのも見つけたけど、まだベータが付いているし、遅いだのそもそもつながらないだの評判が悪かったのでこれは無し。
Cloudflareを利用すると、もともとだいたいこんな感じ↓だったのが、
こんな感じ↓になる。多分。
上のスライド中のリバースプロキシは実際にはいくつもあり、エニーキャストによってブラウザから一番近いものが使われる。
Cloudflare事始め
Cloudflareの始め方はQiitaの記事を参考にした。
Cloudflareのアカウント作成
Cloudflareのサイトに行って
Sign up
のリンクからメアドとパスワードを渡してアカウントを作成。Cloudflareにサイトを登録
アカウント作成後に開くページに従い、4つのステップをこなすとサービス利用開始できる。
まずはサイトの登録。 サブドメインを除いた
kaitoy.xyz
を入力してBegin Scan
をクリック。何かのスキャンが始まるので1分ほど待つ。何をしているのかはよくわからない。
CloudflareのDNSの設定
次のステップでCloudflareのDNSにレコードを登録する。 ブラウザからのトラフィックの誘導には
A
かAAAA
かCNAME
を登録できる。 トラフィックはkaitoy.github.io
に送りたいけど、IPアドレスは自分でコントロールできないのでA
とAAAA
は使えない。CNAME
を登録した。適当に入力して
Add Record
を押すとレコードを登録できるが、Status
のところがデフォルトでDNS only
(灰色のクラウドのアイコン)になっているので、アイコンをクリックしてDNS and HTTP proxy (CDN)
(オレンジ色のクラウドのアイコン)にしておく。 こうしないとブラウザからのトラフィックがCloudflareを経由せず、HTTPS化できないはず。プランの選択
サービスプランは無料の
Free Website
を選択。常時SSL化するだけならこれで十分なはず。レジストラのネームサーバの変更
最後にレジストラのサイトに行ってネームサーバを変更するように指示される。
Cloudflareからは二つのネームサーバが割り当てられたようだ。 指示されたとおりに変更する。
Cloudflareの設定
サインアップが終わるとCloudflareのダッシュボードが開く。
ダッシュボードのOverview
のStatusは
最初はPending
になっていて、これはネームサーバの変更を反映中ということらしかった。
ネームサーバの変更は数時間くらいかかったが、変更中もhttp://www.kaitoy.xyz/
にはアクセスできた。
ダッシュボードからやった設定は以下。 これもQiitaの記事を参考にした。
SSL
ダッシュボードの
Crypto
のSSL
の設定はデフォルトでFull (strict)
になっている。 これはブラウザ-Cloudflare間とCloudflare-GitHub Pages間両方をSSL化する設定。 上で書いたようにGitHub Pagesの方はSSL対応できずこの設定は使えないので、Flexible
に変更。 こちらはブラウザ-Cloudflare間だけをSSL化する。この設定変更をして、SSL証明書が発行されるまで数時間待ったら
https://www.kaitoy.xyz/
にアクセスできるようになった。HSTS
HSTSはHTTPでアクセスしてきたブラウザにHTTPSでアクセスするよう指示する仕組み。 これを有効にしてよりセキュアにする。 ダッシュボードの
Crypto
のHTTP Strict Transport Security (HSTS)
から以下の様に設定した。kaitoy.xyz
だけじゃなくてwww.kaitoy.xyz
で有効にするため、Include subdomains
をOn
にしておくのが肝要のはず。HTTPSへのリダイレクト
HTTPでのアクセスをHTTPSにリダイレクトする設定を加える。 ダッシュボードの
Page Rules
で以下のルールを作った。
ブログサイトの修正
link
タグやscript
タグのwww.kaitoy.xyz
を指しているURLをHTTPSに修正。
内部リンクも全部HTTPSにした。これで完了。