ま、そんなところで。

ニッチな技術系メモとか、車輪を再発明してみたりとか.

OpenSSLでx509証明書 (3) 〜 認証局(CA)からの証明書発行 〜

前に作成した中間認証局httpsサーバ用の秘密鍵/証明書を作成してみる.
ルート認証局からの証明書発行の場合は、CAのパスを読み替えればOK.

3. 認証局から証明書を発行する

3-1. 秘密鍵と証明書署名要求(CSR)の作成

中間認証局で使ったコマンドとほぼ同じだが、使用するcnfファイルが 認証局の signCert.cnfである点に注意.
また、サーバー証明書として使用する場合は -nodes を付けて、サーバーが自動的に使用できるようにパスワード不要な秘密鍵を生成するようにする.

秘密鍵CSRの生成
openssl req -new -newkey rsa:[鍵ビット長] \
  -sha256 -nodes \
  -config {midCAのDir}/conf/signCert.cnf \
  -keyout {鍵の出力先Dir}/my_key.pem \
  -out {証明書の出力先Dir}/my_cert.csr


3-2. 認証局CSRに署名して証明書を作成する

手順は中間認証局秘密鍵/証明書と同じだが、SubjectAltName(SAN)設定を別ファイルから挿入する.

3-2-1. SubjectAltName(SAN)設定ファイルの準備

以下のようにSAN設定を記述した設定ファイル(ファイル名は自由. ここではsan.txt とした.)を準備.
SANには、SubjectのCNに相当する情報(証明書を利用するサーバのURLやIP, email)を指定する.

san.txt (SAN設定ファイル例)
# CNの代替名(SAN)リスト
[san_names]
# DNS.1, DNS.2, ... と入力.
# DNSはFDQN, IPはIPアドレス
DNS.1 = oreore
DNS.2 = xxx.oreore.co.jp
DNS.3 = localhost
IP.1  = 192.168.1.8
IP.2  = 127.0.0.1
email.1  = hogehoge@fugafuga.com
email.2  = hugahuga@xxx.com



3-2-2. 認証局で署名する

openssl caコマンドで署名する.
設定ファイルは midCAのsignCert.cnfとsan.txtを結合し、設定ファイルの「@dummy_names」部分を「@san_names」に置換した内容読み込ませるようにすると汎用的.

san設定を追加してcaで署名する
$ openssl ca -policy policy_anything \
  -days [有効日数] \
  -out {証明書の出力先Dir}/my_cert.pem \
  -in {証明書の出力先Dir}/my_cert.csr \
  -config \
     <( cat {midCAのDir}/conf/signCert.cnf san.txt | \
        perl -pe "s/\@dummy\_names/\@san\_names/g" )



これで証明書の発行は完了♪