みなさんあのね

エクセルいじりがお仕事のインフラ系SEのメモ

Herokuアプリを無料でSSL/TLS化する

経緯

趣味で作っているRailsアプリ(ユーザ数1名)をそろそろ独自ドメイン対応させようかなと、情報収集しているとHerokuのSSLアドオンでSSL/TLS対応するには2千円/月の費用が発生することに気付きました。

HerokuをやめてさくらVPSにでも引っ越してLet's Encryptでも試してみようかな〜なんて思ってたらこんな記事を見つけてしまいました。

robots.thoughtbot.com

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のレコード設定

事前にサインアップしていること。

  1. ドメイン情報スキャン お名前.com等で取得した独自ドメイン名を入力することでドメイン情報がスキャンされる。
  2. ルートドメインをCNAMEとして登録 zone apexなのにCNAME登録はできないでしょ?と思っていたらどうやらCNAME Flatteningという機能が実装されており、問い合わせごとにCNAME情報を辿ってAレコードを応答してくれるらしい。

support.cloudflare.com

設定内容のサンプルは以下。

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リージョンしか対応してないから香港経由での接続でもいいかな。

f:id:si871137:20151129000152p:plain

というかこのエラー画面はあまり表示してほしくないな。

SSLv3.0は無効になってる?

以下のサイトで確認したところSSLv2.0と3.0は無効になっていることがわかった。評価はA+。 www.ssllabs.com

f:id:si871137:20151129002652p:plain

さいごに

本当に無料でSSL/TLS化できてしまいました。しばらくこのまま様子を見つつCloudFlareの他の機能も試してみたいと思います。