開発環境用に自己署名SSL証明書をつくるスクリプトを書いた
外部からアクセスできるサーバ環境の場合はLet’s Encryptを使うことで手軽にSSL証明書を設定できるようになったのですが、ローカルマシンにVagrantでたてた開発用VMの場合はそうもいかず、この場合は自己署名のSSL証明書をつかっています。
証明書の発行は普通にopensslコマンドを手作業で叩いてやってたんですが、
- Chromeだと
-extfile
オプションで追加のパラメータを指定しないと、Macのキーチェーンにインストールした自己署名証明書がエラーになるので、すこし作業の手間が増えた - ローカル環境への名前解決をxip.ioなどのワイルドカードDNSを使うようになって、利用するホスト名が
myapp.192.168.0.10.xip.io
,myapp2.192.168.0.10.xip.io
のように多くなった - xip.ioで名前解決する構成上、サブドメインへの階層が深くなりワイルドカードの証明書が使えなくなったため、ドメイン名ごとに証明書を発行する必要がある
などの理由で、作業がちょっと煩雑になってきたのでスクリプト化しました。
Bashスクリプト実装です。引数にドメイン名を指定して(複数指定も可)実行すると
$ selfsigned-crt example.com
以下のように秘密鍵、CSR、証明書を吐き出します。有効期限は100年。
example.com-selfsigned.key example.com-selfsigned.csr example.com-selfsigned.crt
あとはこの生成した証明書をサーバに配置すればいいのですが、自分の場合、開発環境のプロビジョニングツールに、このスクリプトを実行させるようにレシピを書いておいて、証明書の生成もプロビジョニングツールにやらせてます。自作ツールのcofuを使うと以下のような感じ、
execute "generate-self-signed-ssl" { command = [=[ selfsigned-crt -o /etc/nginx/ssl myapp1.192.168.1.10.xip.io ]=], not_if = "test -f /etc/nginx/ssl/myapp1.192.168.1.10.xip.io-selfsigned.crt", }
これで開発環境をセットアップするときに、自動的に証明書も作成できるようなりました。