テスト用にGoでオレオレ証明書を発行

ローカルな環境で、WebアプリケーションにSSL/TLS証明書を利用したい時があるかと思います。

なんとGoの標準パッケージにオレオレSSL/TLS証明書を生成する機能があったので、試してみました。

cryptoパッケージの確認

Linuxだと、/usr/local/go/src/に証明書関連のパッケージがあります。環境によって異なる場合があるので、そこは適宜確認します。

ls -la /usr/local/go/src/crypto/tls

SSL/TLS証明書の発行

cryptoパッケージの場所がわかったら、下記のコマンドでパスを指定し、SSL/TLS証明書を発行できます。

go run /usr/local/go/src/crypto/tls/generate_cert.go --rsa-bits=2048 --host=localhost

--host=の部分にホスト名を記述します。

上記コマンドを実行すると、key.pemcert.pemの証明書が発行されます。

発行された証明書は、信頼された認証局によって署名されたものではないので、そのままブラウザでアプリケーションを開くとエラーとなります。しかしそれ以外は通常のTLS証明書と同じです。

証明書の適用

LBにアタッチしたり、Nginxに設定したり、いろんな適用方法があるかと思いますが、Go標準のnet/httpパッケージの使う場合、ListenAndServeTLSメソッドを使って次のように設定できます。

err := http.ListenAndServeTLS(":1313", "./tls/cert.pem", "./tls/key.pem", nil)

ListenAndServeTLSメソッドの詳細は公式ドキュメントを参照のこと。

ブラウザで無効な証明書があてられているlocalhostへのリクエストを許可

オレオレ証明書は信頼された認証局によって署名されていないため、アプリケーションに設定しても、ブラウザで開くとエラーになります。

Chromeの場合はchrome://flags/#allow-insecure-localhostをURL部分に入力して、Allow invalid certificates for resources loaded from localhostの設定を有効にすると、ローカルホストの証明書が許可されます。

まとめ

localhostでSSL/TLS証明書が必要なケースは稀ですが、たまにテストをしたいときなど、この方法は使えるかと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください