☀️

SAN 付きの自己署名証明書を作る

2024/03/26に公開

アプリ開発の序盤から認証関連を扱う事が多く、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.keyserver.cer および server.pfx が生成できました。
テストや開発用に立てる Web サーバーたちで重宝するので備忘録として残します。

それではまた!

コラボスタイル Developers

Discussion