旅とプログラミングを少々

趣味に関する記録などをします。おそらくプログラミング入門に関しての内容を連ねていきます。

家庭内トラストレス化へむけてクライアント証明書の発行

オレオレCAにクライアント証明書を発行してもらう。

まずはopenssl.cnfを編集する。

# x509_extensions = usr_cert とデフォルトCAのフィールドで指定しているので、[ usr_cert ] extension 部分を探す。
# このCAが署名した時にどのような目的の鍵として使えると示すか。このCA自体の制約ではない。
[ usr_cert ] 
nsCertType = client,email
keyUsage = digitalSignature, keyEncipherment
# keyUsageはnonRepudationとdigitalSignatureが排他の方が何を目的とした署名や証明なのか明確になるだろうが、実態としては目的のkeyUsageだけ確認して他のkeyUsageが有効でも別に良しとされるみたい。
extendedKeyUsage = clientAuth

クライアント用に新しい鍵と署名要求を作る。

# pwd
/usr/local/share/pki
# SSLEAY_CONFIG="-config ./openssl.cnf" ./CA.pl -newreq-nodes
(略)
Please enter the following 'extra' attributes
to be sent with your certificate request
# デフォルトの [ req_attributes ]をそのままにしていたためattributeが要求される。opensslが署名する時には基本的に無視されているフィールド。別の仕様のCAでは要求されることもある。
A challenge password []:
An optional company name []:
(略)

そしてできたCSRを使ってオレオレCAが署名する。CA.plに余計な環境変数を与えていない限り、秘密鍵CSRのファイル名が変わらず自動的にnewreq.pemが使われる。

# SSLEAY_CONFIG="-config ./openssl.cnf" ./CA.pl -sign 
Using configuration from ./openssl.cnf
# CAの秘密鍵のパスフレーズが要求される。
Enter pass phrase for ./CA/private/cakey.pem:
(略)

これでこのCAにより署名されたnewcert.pemができあがる。

newcert.pemとnewkey.pemをクライアントのブラウザに配布しやすくするために、p12ファイルにする。こちらもファイル名がCA.plが知っている通りのままなので、細々とした環境変数やオプションが不要となる。

# ./CA.pl -pkcs12
Enter Export Password:
Verifying - Enter Export Password:
PKCS #12 file is in newcert.p12

newcert.p12をユーザ側に配布してブラウザに読み込ませれば完了となる。