はじめに
AWSのCloudFrontを使っている時に、アクセスするファイルのドメインの問題を解消したくなりました(xxx.cloudfront.net
という名前のホストにCookie有効でアクセスしたいのです)。本番同様にローカル開発環境からSSLでアクセスして、AWSの環境にアクセスさせる環境をつくろうと思い立ちましたが、結構難儀したのでまとめておきたいと思います。
以前はごまかせたのに、昨今のブラウザがちゃんと証明書を作らないと表示すらさせてくれない(つれぇよ。設定でホワイトリストさせておくれよ)ので、こんな遠回りなことになっている気がします。
手順
Hostsの設定をする
https://qiita.com/abdonwww/items/903431d1dad743dc9c69
こちらを参考にすると、local.xxx.cloudfront.net
のような名前で自ローカルサーバーへアクセスできるようにすることが必要そうです。
というわけでHostsを設定します。
127.0.0.1 local.xxx.cloudfront.net
オレオレ証明書を作る
https://qiita.com/pikanji/items/a09e906f7099f7eed392
こちらがとっても鮮やかでした!惚れてまうやろ!(古い)
とっても丁寧に書かれているので、こちらを参考にやると良いと思います。
私の場合には下記のように.env
を修正しました。
DOMAIN=xxx.cloudfront.net
COMMON_NAME=local.xxx.cloudfront.net
プロジェクト外でファイルを作って下記のようにしました。他の人が試す時にはこれらのファイルで接続してもらえればわざわざ証明書を作ってもらわなくて済むようになりますよね(多分)。server.crt
はxxx.cloudfront.net.crt
という名前で作られているものをリネームしています。同様にserver.p12
はxxx.cloudfront.net.p12
からリネームしました。
/lib/supports/ssl/server.key
/lib/supports/ssl/server.crt
/lib/supports/ssl/server.p12
/lib/supports/ssl/root_ca.crt
Pumaに設定する
https://qiita.com/zaru/items/ccf328e87c768168134d
ssl_bind という機能でやるんですね。
私が間違えてしまったのは 9292の部分を自分が立ち上げているサーバーのポート(ENV.fetch("PORT") { 3000 }
) にすると読み違えてしまったことです。ここはwellknownポートにしたいはずなので、 443で良いです。以下のように書けば良さげですね。
if "development" == ENV.fetch("RAILS_ENV") { "development" }
ssl_bind '0.0.0.0', 443, {
key: Rails.root.join('lib', 'supports', 'ssl', 'server.key'),
cert: Rails.root.join('lib', 'supports', 'ssl', 'server.crt'),
ca: Rails.root.join('lib', 'supports', 'ssl', 'root_ca.crt'),
verify_mode: "none"
}
end
サーバーを起動する
sudo してね!
$ sudo bin/rails s
Password:
=> Booting Puma
=> Rails 5.1.4 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.10.0 (ruby 2.4.1-p111), codename: Russell's Teapot
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
* Listening on ssl://0.0.0.0:443?cert=/path/to/project/lib/supports/ssl/server.crt&key=/path/to/project/lib/supports/ssl/server.key&verify_mode=none
Use Ctrl-C to stop
アクセスすると下記のようなエラー表示が出るかもしれない。原因不明です。実害はなさそう。
2017-09-27 03:42:15 +0900: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: System error: Undefined error: 0 - 0>
おしまいに
些細なところでも気づかないとかなり時間を食ってしまうのがこの手の作業の辛いところでした。