OpenSSLでx509証明書 (3) 〜 認証局(CA)からの証明書発行 〜
前に作成した中間認証局でhttpsサーバ用の秘密鍵/証明書を作成してみる.
ルート認証局からの証明書発行の場合は、CAのパスを読み替えればOK.
3. 認証局から証明書を発行する
3-1. 秘密鍵と証明書署名要求(CSR)の作成
中間認証局で使ったコマンドとほぼ同じだが、使用するcnfファイルが 認証局の signCert.cnfである点に注意.
また、サーバー証明書として使用する場合は -nodes を付けて、サーバーが自動的に使用できるようにパスワード不要な秘密鍵を生成するようにする.
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" )
これで証明書の発行は完了♪