Name Constraints が何であるかについては、以前オレオレ認証局の適切な運用とName Constraintsに書いたとおり。
本稿では、Name Constraintsを使うCAの運用手順を説明する。
1. CA鍵と証明書の作成
1.1. CAの秘密鍵を作成
% openssl genrsa -out ca.key 2048
1.2. openssl.cnfにCA証明書に設定する属性を指定するセクションを追記
[private_ca] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints=critical,CA:true nameConstraints=critical,permitted;DNS:.example.com注:nameConstraintsの項がCAが証明書を発行できる対象のドメインを指定。この例では.example.com。
1.3. CA証明書の作成
% openssl req -new -x509 -days 3650 -key ca.key -out ca.crt \ -extensions private_ca
2. 証明書管理用ディレクトリを作成
% mkdir -p demoCA/newcerts % touch demoCA/index.txt % echo 00 > demoCA/serial注:ディレクトリ名(demoCA)はopenssl.cnfの設定で変更可能。
3. 証明書発行要求を受け取って証明書を発行
% openssl ca -keyfile ca.key -cert ca.crt \ -extensions usr_cert -policy policy_anything -days 365 \ -md sha256 -in foo.example.com.csr -out foo.example.com.crt
以上です。
難点としては、SafariおよびOSXで動作するChromeではこのルート証明書で署名されたサーバ証明書を正当なものとして認識してくれないところ(手動でサーバ証明書を登録すれば使えるはず)。他のウェブブラウザ+モダンなOSなら問題ないはず。