ローカルで HTTPS な Web サービスを開発する時にあるあるな 「自己署名証明書つらい」 問題。
-
chrome://flags#allow-insecure-localhost
仮想環境など localhost にサーバを立てれないとつらい - Firefox 証明書の例外追加 他のブラウザにない機能なのでつらい
解決します。
要約
- FiloSottile/mkcert をインストールします。
-
$ mkcert -install
打ちます。 - ブラウザ再起動します。
-
$ mkcert 任意のドメイン名(複数個、ワイルドカードOK)
打ちます。 - 生成された鍵をサーバに設定して再起動します。
- 完
何が起こっている?
ブラウザが「この証明書が valid かどうか」を判定するため、ローカルに 「ルート CA (証明局)」 という情報を持っています。
デフォルトでは各ブラウザベンダーが承認したルート CA と、そこから木構造で発行の権限が移譲されている中間 CA が設定されていて、それらの CA から発行された証明書であれば valid である、という判定を行っています。
mkcert
は、この ルート CA を生成し、自分のブラウザに登録します。
本来ルート CA の自分での登録は様々な設定を行って、色んなコマンドを叩いてやっと実現出来る作業なんですが、 mkcert
はそれらの面倒を完全に省略することが可能です。 mkcert -install
に全ての面倒が圧縮されています。
これで、 ローカルの mkcert で発行された証明書は valid とみなす とブラウザが判断出来るようになります。
もちろんこれはこの環境以外では valid ではない(valid とみなすルート CA がない)ので、ローカル環境だけで利用してくださいね。
Web サービスを開発するエンジニアは全員ローカルに mkcert
によるルート証明局を持つ世界になったらいいなーと思います。
証明書つらい問題を抱えている全てのエンジニアに届いてほしい!
(証明書周りはあまり詳しくないので間違った表現もあると思います。とりあえず ローカルで簡単に valid な証明書作れる
だけ覚えてもらえれば助かります。)
※ sample.com
さんを参考資料として掲載しましたが、ローカルでは実在しないドメインを使いましょう!