中間CA向けキーマテリアル作成
プライベートCAを構築したら,今度は各サーバ向けに証明書を発行できるようになります。
ここでは,中間CA向けのキーマテリアル(秘密鍵や証明書などデジタル証明関連のファイル)を作成する方法を紹介します。
なお,OpenSSLのコマンドの詳細は,「openssl 1.0.2 manpages」にあります。
確認環境
1つのマシンですべての作業を行うことは可能ですが,本来は秘密鍵ファイルとCSRファイルを作成する側と,証明書ファイルを発行する側は,異なる組織または部門で行うものです。
ここでは異なる組織/部門で行うことを想定して,2つのマシンで作業します。
- 中間CAのマシン
- このマシンで,秘密鍵ファイル,CSRファイルを作成
- CentOS 7
- OpenSSL 1.0.2k-fips
- プライベートCAのマシン
- プライベートCAの構築方法は「プライベートCAを構築する」を参照
- このマシンが「 ルートCA 」の位置付けとなる
中間CAマシンでの作業
作業ディレクトリを作成
作業ディレクトリを作成し,そこに移動します。
$ mkdir -p /tmp/keys
$ cd /tmp/keys
利用可能な曲線を確認
次のコマンドで, prime256v1
が出力されればOKです。
$ openssl ecparam -list_curves
秘密鍵ファイルを作成
曲線 prime256v1
を使用して,暗号鍵ファイル private.pem
を作成します。
$ openssl ecparam -name prime256v1 -genkey -out private.pem
秘密鍵が破損していないことを確認
$ openssl ecparam -check -noout -in private.pem
秘密鍵ファイルをPKCS#8に変換
$ openssl pkcs8 -topk8 -nocrypt -in private.pem -out key.pem
CSRファイルを作成
$ openssl req -new -sha256 -key key.pem -out csr.pem -verbose -subj "/C=JP/ST=Tokyo/L=Minato-ku/O=My Company/OU=My Company Certificate Authority/CN=*.example.com"
CSRファイルを確認
$ openssl req -text -noout -in csr.pem
以上で,秘密鍵ファイルとCSRファイルを作成できました。秘密鍵は漏洩しないように管理します。
CSRファイル csr.pem
「だけ」をプライベートCAに渡して,証明書を発行してもらうことになります。
プライベートCAマシンでの作業
今度は,プライベートCA(ルートCAの位置付け)で,中間CAから受け取ったCSRファイル csr.pem
から証明書ファイル cert.pem
を作成します。
作業ディレクトリを作成
作業ディレクトリを作成し,そこに移動します。
$ mkdir -p /tmp/keys
$ cd /tmp/keys
証明書の拡張情報ファイルを作成
プライベートCAで証明書を作成する際に,証明書に追記する情報が必要です。
サーバの種類ごとに情報が異なるため,その都度ファイルを作成します。
中間CA向けの証明書の場合,次のような内容になります。Webサーバ向けの場合は内容が異なるので留意します。
keyUsage
がポイントで,中間CAとしては cRLSign
と keyCertSign
が必要です。
authorityKeyIdentifier=keyid,issuer
basicConstraints = critical,CA:TRUE
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier=hash
証明書ファイルを作成
有効期限が1,068日(3年間)の証明書ファイルを作成します。
/etc/pki/tls/openssl.cnf
ファイルを見ての通り,OpenSSLはデフォルトでは policy_match
のポリシーで証明書を作成します。しかし,このポリシーだとプライベートCAとCSRファイルの国名,都市名,組織名が一致しないと証明書を作成できません。そのため, -policy policy_anything
オプションを指定して緩い条件で証明書を作成します。
また, -extfile v3.txt
オプションで拡張情報ファイルを指定します。先述の通り,証明書に「中間CA向けの証明書」であることを書き込むためです。
$ sudo openssl ca -policy policy_anything -days 1068 -in csr.pem -out cert.pem -extfile v3.txt
なお,過去に作成した証明ファイルと同じ国名,組織名などで証明書を作成しようとした場合に,次のエラーが出力されます。
failed to update database
TXT_DB error number 2
このようなときは,次の方法で過去の証明書を取り消させます。
xxx.pem
は過去に発行した証明書ファイルです。
$ sudo openssl ca -revoke /etc/pki/CA/newcerts/xxx.pem
証明書ファイルを確認
最後に,証明書ファイルを確認します。
$ openssl x509 -text -noout -in cert.pem
$ cat cert.pem
以上で作成した証明書ファイル cert.pem
を,中間CAのマシンに渡します。
これで「証明書を発行」したことになります。
中間CAマシンで必要なファイル
以上の作業でいくつかファイルが揃いますが,中間CAで必要なのは次のファイルのみです。
それ以外は破棄します。特に,key.pem
は漏洩しないように管理します。
-
key.pem
: 秘密鍵ファイル -
cert.pem
: 証明書ファイル
プライベートCAの管理状況
余談ですが,プライベートCAで証明書を発行した時に生成されるファイルについては,次のコマンドを実行すれば分かります。treeコマンドがない場合は, sudo yum install tree
で投入します。
$ sudo su -c "tree /etc/pki/"