開発環境のRails5をSSL化

仕事でRailsプロジェクトに参加しているのですが、必要があってローカル開発環境のRailsをSSL化しないといけない場面に遭遇しました。
その時に調査したことをここにまとめます。
結果的にSSLでの接続に成功しました。



前提

macOS (Mojave 10.14.5)
ruby 2.4.4
Rails 5.2.4.2
Chrome 81.0.4044.138

調査

まずは同じようなことをやった人をググりました。
やっぱりいました。

https://tsubasa0105.hatenablog.com/entry/2019/02/16/191717

というわけでこの記事を参考にとりあえずのRailsプロジェクトを作成し、実験してみます。

ローカル環境に認証局を作成

mkcertというローカルに認証局を作成してくれるツールのようです。
以下のコマンドでローカル環境に認証局が作られます。
一度、作成してしまえば、あとは証明書を作成できます。

brew install mkcert
mkcert -install

実験用Railsプロジェクト作成

rails new ssl-test
cd ssl-test

証明書を作成

cd tmp
mkcert localhost
cd ..

pumaの設定を変更


vi config/puma.rbに以下の設定を追加。

ssl_bind '0.0.0.0', '3443', {
 key: 'tmp/localhost-key.pem',
 cert: 'tmp/localhost.pem'
}


動作確認

サーバを起動してブラウザからアクセスしてみます。


rails s
=> Booting Puma
=> Rails 5.2.4.2 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.4 (ruby 2.4.4-p296), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
* Listening on ssl://0.0.0.0:3443?cert=tmp/localhost.pem&key=tmp/localhost-key.pem&verify_mode=none
Use Ctrl-C to stop

chromeを起動して、https://localhost:3443/ にアクセス。

残念ながら、うまくいきませんでした。

2020-05-17 20:00:03 +0900: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:141F7065:SSL routines:final_key_share:no suitable key share - 337604709>
2020-05-17 20:00:03 +0900: SSL error, peer: 127.0.0.1, peer cert: , #<Puma::MiniSSL::SSLError: OpenSSL error: error:141F7065:SSL routines:final_key_share:no suitable key share - 337604709>

再調査


たぶん同じような人がいるに違いないと思い、再度ググります。
こちらも同じ問題にあたってる人を発見。

https://stackoverflow.com/questions/55790150/ssl-certificate-not-working-on-rails-local-after-upgrading-to-chrome-73

どうやらchromeのversion70以降ではオレオレ証明書に対応してないことが原因の模様。また、puma側もchromeのそのような挙動に対応していなかったっぽい。
stackoverflowの回答ではpumaを4.3以降にしたら大丈夫みたいなので、こちらでも同じことを実験してみる。

pumaのバージョンアップ

Gemfileを開いてpumaのバージョンを上げる

# Use Puma as the app server #gem  'puma', '~> 3.11'    <- コメントアウト
gem 'puma', '~> 4.3'      <- pumaのバージョンを4.3

その後はbundle install。

bundle install

動作確認

rails sで起動し、 https://localhost:3443/ にアクセス。

今度はうまくいきました!


この記事が気に入ったらサポートをしてみませんか?