mkcertを使ってローカル開発環境でSSLを有効にする方法を解説します。
今回は特にWindowsにおいて、WSL2でmkcertを使用してSSL証明書を生成して、
ローカル開発環境でSSLを有効にするときにつまづいたので、
その手順を詳しく説明します。
mkcertとは
mkcertは、ローカル開発環境でSSL証明書を簡単に生成するためのツールです。
mkcertのインストール
mkcertをMacやWindowsにインストールする最も簡単な方法はhomebrewを使うことです。
WindowsのWSL2であれば、Homebrew(Linuxbrew)を使うことができます。

次のコマンドでmkcertをインストールできます。
brew install mkcert
ローカルのCA証明書を生成
mkcertをインストールしたら、ローカルのCA証明書を生成する必要があります。
WSLのターミナルで次のコマンドを実行して、ローカルのCA証明書を生成します。
mkcert -install
このコマンドを実行すると、ローカルのCA証明書が生成されます。
作成されたことを確認するには、次のコマンドを実行します。
mkcert -CAROOT
このコマンドを実行すると、mkcertが生成したCA証明書のパスが表示されます。
通常は~/.local/share/mkcert
のようなパスが表示されます。
このディレクトリにrootCA.pem
というファイルが生成されていればOKです。
ls ~/.local/share/mkcert
次のような出力が表示されれば、CA証明書が生成されています。
rootCA-key.pem rootCA.pem
Windows側にmkcertをインポートする
ローカル証明書を作成したら、Windows側にmkcertをインポートする必要があります。
これを行うことで、WindowsのブラウザやアプリケーションがmkcertのCA証明書を信頼するようになります。
次のコマンドでmkcertをWindowsにインポートします。
certutil.exe -user -addstore root "$(wslpath -w "$(mkcert -CAROOT)/rootCA.pem")"
certutilはWindowsの証明書管理ツールで、-user
オプションはユーザーストアに証明書を追加することを意味します。
-addstore root
はルート証明書ストアに証明書を追加することを意味します。
wslpathはWSLとWindowsのパスを変換するためのコマンドで、mkcert -CAROOT
で取得したCA証明書のパスをWindows形式に変換します。
つまり、先ほどmkcert install
で生成したCA証明書をWindowsのルート証明書ストアに追加することになります。
この手順がないと、ブラウザで証明書が無効な状態になり、SSL接続ができません。
(小1時間くらいはまりました..)
参考:
プロジェクト用のCA証明書を生成
次にプロジェクト用のCA証明書を生成します。
プロジェクトの任意のディレクトリにCA証明書を作成します。
Ruby on Railsであれば、config/ssl
ディレクトリなどに作成しておくとよいでしょう。
mkdir -p config/ssl
mkcertを使ってCA証明書を生成します。
ポイントは-key-file
と-cert-file
オプションを使って、生成する証明書のディレクトリとファイル名を指定することです。
mkcert -key-file config/ssl/key.pem -cert-file config/ssl/cert.pem localhost 127.0.0.1 ::1
このコマンドを実行すると、config/ssl/key.pem
とconfig/ssl/cert.pem
というファイルが生成されます。
これらのファイルがSSL証明書と秘密鍵になります。
RailsのPuma設定を変更
次にこのSSL証明書をRailsのPumaサーバーで使用するように設定します。
config/puma.rb
ファイルを開いて、以下のように設定を追加します。
development環境ではSSLを有効にし、その他の環境では通常のポートで起動するようにします。
# SSL設定if ENV['RAILS_ENV'] == 'development' ssl_bind '0.0.0.0', '3000', { key: 'config/ssl/key.pem', cert: 'config/ssl/cert.pem' }else port ENV.fetch('PORT', 3000)end
動作確認
これでSSLの設定が完了しました。
Railsのサーバーを起動して、ブラウザでhttps://localhost:3000
にアクセスしてみてください。
SSLが有効になっている場合、ブラウザのアドレスバーに鍵マークが表示され、SSL接続が確立されていることが確認できます。
まとめ
mkcertを使ってローカル開発環境でSSLを有効にする方法を解説しました。
Windows側にmkcertをインポートする
手順が特に重要で、これを行わないとブラウザで証明書が無効と表示されてしまいます。
こちらの手順を忘れないようにしてください!