Railsの開発環境でHTTPSを有効にする

Jul 16, 2018 09:49 · 158 words · 1 minute read rails

いまだとどうするのが良いんだろうね、と思い調べたのメモ。サーバはPumaを使う前提で、2018/07時点での話。

証明書準備

昔はこれが色々手間だったのだが、今はmkcertという大変便利なツールがあり、これを使えばすぐ終わった。

READMEに書いてあるとおりにインストールすれば、Linux / Macについては直ぐ準備出来ると思う。因みにWindowsは「Windows will be supported next.」とのこと(2018/07時点)。

で、このツールを使い、localhost用のcertificateとkeyファイルを生成する。

$ mkcert -install
Using the local CA at "/home/yaginuma/.local/share/mkcert" ✨
$ ./bin/mkcert localhost
Using the local CA at "/home/yaginuma/.local/share/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "localhost"

The certificate is at "./localhost.pem" and the key at "./localhost-key.pem" ✅

後は生成されたcertificateとkeyを適当なディレクトリに格納して準備終了。

Pumaの設定

PumaはPuma自体にSSL用の処理が含まれているので、configファイルにcertificateとkeyのpathを指定してあげればOK。

# config/puma.rb

cert = "/path/to/localhost.pem"
key = "/path/to/localhost-key.pem"
ssl_bind "0.0.0.0", 9292, cert: cert, key: key

後は普通にrails serverでserverを起動する。

$ rails server

上記ではportに9292に指定しているので、https://localhost:9292/ にアクセスするとHTTPSになっている事が確認出来る。

9292ではなく、普通にRails Serverを起動したと同じように3000番を使いたい場合、上記9292を3000に変更すればOK。ただその場合、同じ設定ファイルでportに3000を指定している場合、そこを変更する必要がある。

diff --git a/config/puma.rb b/config/puma.rb
index 385d394..cf2a801 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -9,7 +9,6 @@ threads threads_count, threads_count

 # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
 #
-# port        ENV.fetch("PORT") { 3000 }

 # Specifies the `environment` that Puma will run in.
 #
@@ -35,4 +34,4 @@ plugin :tmp_restart

-ssl_bind "0.0.0.0", 9292, cert: cert, key: key
+ssl_bind "0.0.0.0", 3000, cert: cert, key: key

これで https://localhost:3000/ にアクセス出来る。

config.force_ssl = trueを指定しても良いかもだが、その辺りはお好みで。

おしまい。