オープンソースこねこね

Webプログラミングなどについてあれこれ。

開発環境用に自己署名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で名前解決する構成上、サブドメインへの階層が深くなりワイルドカードの証明書が使えなくなったため、ドメイン名ごとに証明書を発行する必要がある

などの理由で、作業がちょっと煩雑になってきたのでスクリプト化しました。

github.com

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",
}

これで開発環境をセットアップするときに、自動的に証明書も作成できるようなりました。

関連外部リンク