SAN 付きの自己署名証明書を作る
アプリ開発の序盤から認証関連を扱う事が多く、https なアクセス要件を満たす必要があります。そのためには TLS サーバーの起動準備が必要ですが、その前の準備として電子証明書が必要です。
API サーバーと Web サーバーは別ドメインで運用するから、サードパーティー扱いでブラウザーのセキュリティ云々と付帯事項が色々ありますが、手間は減らしたいので1つにまとめた電子証明書を作ります。
今回の対象のドメイン
以下のように 2 つの完全なドメイン名 (FQDN) とワイルドカードサブドメインに対応した自己署名証明書、いわゆるオレオレ証明書を OpenSSL で作る方法です。
- localhost
- demo.local
- *.demo.local
前提条件
- OpenSSL が利用できる環境
作っていくぅ
有効期間は 3650 日(約 10 年)とします。
以下をそのまま実行します。
openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -subj "/CN=localhost" -addext "subjectAltName=DNS:localhost,DNS:demo.local,DNS:*.demo.local" -keyout server.key -out server.cer
localhost
をサブジェクトとしつつ、subjectAltName (SAN) で他のドメイン設定を追加します。
出来上がるファイル
- server.key が PEM 形式の秘密鍵です。
- server.cer が PEM 形式の電子証明書(公開鍵入り)です。
PEM 形式のファイルを利用する Web サーバーであればこれらを使います。
起動例
serve での起動例
serve を利用した暗号化付きでローカルサーバーを起動する方法です。
npx serve@latest -l 443 --ssl-cert server.crt --ssl-key server.key ./public
ブラウザーで https://localhost/ にアクセスすればOKですが、もちろん証明書警告(信頼されてない証明書)がでます。そこは良しなに。
ついでに PKCS#12 / pfx
ついでに PKCS#12 なファイルも作ります。
Windows Server ではおなじみの IIS で使える PFX 形式です。
openssl pkcs12 -export -name "localhost" -inkey server.key -in server.cer -out server.pfx
Enter Export Password:
Verifying - Enter Export Password:
実行すると Export Password
として、読取り時(インポート時)に必要なパスワードの設定を求められますが、未入力(空行)で進むか適宜入れます。
おわりに
これで10年物の server.key
と server.cer
および server.pfx
が生成できました。
テストや開発用に立てる Web サーバーたちで重宝するので備忘録として残します。
それではまた!
Discussion