証明書署名要求(CSR)やPKCS#12をdockerで作る
TLS サーバー証明書をベリサイン等の公的な認証機関(CA)から購入・発行してもらうには、証明書署名要求(CSR)が必要になります。
年1回または数年に1回というレアイベント。特に Windows マシンだと発行するために Windows 用の openssl バイナリ一式だの実行パス設定など準備からして地味に手間が掛かる作業です。
最近ではすっかり WSL2 と docker の相性も良くなって活用しているので、これを機にローカル環境ではなく、docker 内で CSR の生成手順をまとめました。
準備
コンテナ起動
生成したファイルたちは手元に保管したいので、作業フォルダを /work
としてマウントしつつコンテナ起動します。
docker run -it --rm -v "${pwd}:/work" ubuntu:latest
整備
コンテナ起動した ubuntu に入れたら、OpenSSL パッケージをインストールします。
apt update && apt install openssl
生成する
マウントした /work
ディレクトリに移動してから、秘密鍵と CSR の生成を始めます。
サブジェクトも指定してプロンプト入力の手間を省きます。
cd /work
openssl genrsa -out example.com.key 2048
openssl req -new -key example.com.key -out example.com.csr -subj "/C=JP/ST=Aichi/L=Nagoya/CN=example.com"
CSR を確認する
cd /work
openssl req -in example.com.csr -text
こんな感じで見えるはず。
Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = JP, ST = Aichi, L = Nagoya, CN = example.com
Subject Public Key Info:
:
省略
証明書と秘密鍵から PKCS#12 (pfx) ファイルを作る
CA から発行されたPEM形式の証明書を受領した後のおまけ工程です。
証明書と秘密鍵を合わせて PKCS#12 ファイルにまとめます。
あらかじめ証明書を example.com.cer
として保存して、中間CA証明書も含めるならそれも ca.cer
として作業フォルダに保存しておきます。
コンテナの中で実行します。
cd /work
openssl pkcs12 -export -name "example.com" -inkey example.com.key -in example.com.cer -certfile ca.cer -out example.com.pfx
後片付け
生成が全て終わったら、コンテナを exit
等で抜けます。
コンテナ起動時に --rm
指定してるので抜けたらコンテナも消えて終わりです。
※途中で抜けたら、openssl パッケージももちろん消えるので再度作業するにはパッケージインストールする準備から。この辺りはよしなに。
おわりに
コマンドツールとして docker を利用してみて、改めて便利だなと感じました。
普段は開発で PostgreSQL のデータベースやら Web サーバーを起動するサーバーとしての役割が大半ですが、こういったツールとしても良いですね。
年一回のレアイベントを早く済ましたいサーバー管理者の助けになれば。
それではまた!
Discussion