Herokuアプリを無料でSSL/TLS化する
経緯
趣味で作っているRailsアプリ(ユーザ数1名)をそろそろ独自ドメイン対応させようかなと、情報収集しているとHerokuのSSLアドオンでSSL/TLS対応するには2千円/月の費用が発生することに気付きました。
HerokuをやめてさくらVPSにでも引っ越してLet's Encrypt
でも試してみようかな〜なんて思ってたらこんな記事を見つけてしまいました。
DNS機能やFirewall機能を兼ね備えたCDN「CloudFlare」経由でアクセスしちゃえば無料でSSL/TLS対応することができるよという記事です。試してみるしかないですね。
設定手順
1. Railsアプリの設定変更
config/environments/production.rbで強制SSL化させる。
config.force_ssl = true
コミットしてHerokuにプッシュ。
$ git push heroku master
2. Herokuのドメイン設定
お名前.com等で取得した独自ドメインをHerokuに登録。これをしとかないとHostヘッダチェックでリクエストが弾かれる。
$ heroku domains:add mydomain.net
3. cloudflareのレコード設定
事前にサインアップしていること。
- ドメイン情報スキャン お名前.com等で取得した独自ドメイン名を入力することでドメイン情報がスキャンされる。
- ルートドメインをCNAMEとして登録
zone apexなのにCNAME登録はできないでしょ?と思っていたらどうやら
CNAME Flattening
という機能が実装されており、問い合わせごとにCNAME情報を辿ってAレコードを応答してくれるらしい。
設定内容のサンプルは以下。
Type: CNAME Name: mydomain.net Content: appname.herokuapp.com
4. お名前.comのネームサーバ設定変更
CloudFlareの指示通りのネームサーバを設定する。NSレコードのTTLだけ待たないと反映されないかも。
5. CloudFlareのSSL設定
Full SSL
に設定するだけ。
以上で設定は完了。https://mydomain.net
にエラーなく接続できるようになった。
気づいたこと
接続経路は?
日本からCloudFlareを利用すると香港経由で接続するっぽい。Herokuアプリがスリープしてた時にたまたま表示されたエラー画面を見て気付いた。HerokuはUSリージョンとEUリージョンしか対応してないから香港経由での接続でもいいかな。
というかこのエラー画面はあまり表示してほしくないな。
SSLv3.0は無効になってる?
以下のサイトで確認したところSSLv2.0と3.0は無効になっていることがわかった。評価はA+。 www.ssllabs.com
さいごに
本当に無料でSSL/TLS化できてしまいました。しばらくこのまま様子を見つつCloudFlareの他の機能も試してみたいと思います。