OpenSSL(http://www.openssl.org/)を使って,公開鍵認証基盤(PKI)で利用される公開鍵や公開鍵証明書を作る方法を解説します. Windows版のOpenSSLは, http://www.slproweb.com/products/Win32OpenSSL.html にあります. なお,OpenSSLのコマンドを利用した公開鍵証明書に関連した主な操作を opensslコマンドの操作に示します.
ここでは,認証局(CA局)として,RootとCA2という2階層のCAを想定します. CA2はRootにより認証され,ユーザはCA2により認証されるものとします. Rootは自己認証します.
Root証明書の生成 | CA2証明書の生成 | ユーザ証明書の生成 |
PKCS#7形式ファイルの生成 | CRLの生成 |
openssl req -config openssl.cfg -newkey rsa:1024 -x509 -days 365 -sha1 -out cacert.pem -keyout cakey.pem生成された秘密鍵と証明書は,それぞれ以下により内容を確認することができる.
openssl rsa -in cakey.pem -noout -text openssl x509 -in cacert.pem -noout -text
cat cacert.pem cakey.pem > cacert12.pem openssl pkcs12 -export -in cacert12.pem -out cacert.p12 -name rootca
openssl x509 -in cacert.pem -inform PEM -out cacert.cer -outform DER
openssl req -config openssl2.cfg -newkey rsa:1024 -sha1 -out ca2req.pem -keyout ca2key.pem
openssl x509 -req -days 365 -sha1 -CA cacert.pem -CAkey cakey.pem -CAserial serial -extfile openssl2.cfg -extensions v3_ca -in ca2req.pem -out ca2cert.pemファイルserialは証明書のシリアル番号を指定するファイルで,1行で16進偶数桁の値を設定したファイルである.
cat ca2cert.pem ca2key.pem > ca2cert12.pem openssl pkcs12 -export -in ca2cert12.pem -out ca2cert.p12 -name ca2
openssl x509 -in ca2cert.pem -inform PEM -out ca2cert.cer -outform DER
openssl req -config openssl2.cfg -newkey rsa:1024 -sha1 -out usrreq.pem -keyout usrkey.pem
openssl x509 -req -days 365 -sha1 -CA ca2cert.pem -CAkey ca2key.pem -in usrreq.pem -out usrcert.pem
cat mycert.pem mykey.pem > usrcert12.pem openssl pkcs12 -export -in usrcert12.pem -out usrcert.p12 -name user1
openssl x509 -in usrcert.pem -inform PEM -out usrcert.cer -outform DER
cat cacert.pem ca2cert.pem > cacerts.pem openssl pkcs12 -export -in usrcert12.pem -certfile cacerts.pem -out usr1certs.p12 -name usr1certs
公開鍵証明書を含むPKCS#7ファイルを生成する.
cat usrcert.pem ca2cert.pem > usrcertpath.pem openssl crl2pkcs7 -outform DER -nocrl -certfile usrcertpath.pem -out usrcertpath.p7b
証明書失効リスト (CRL) を生成する.
index.txtというファイルに失効リストが格納される(空のファイルを用意しておく). index.txt.attrにindex.txtにて管理する通番に重複を許すかどうかの設定を行う. "unique_subject = yes"(重複を許さない),または"unique_subject = no"(重複を許す)を記述する.
また,失効リストのシリアル番号を指定するファイルcrlserialが必要である. これは,1行で16進偶数桁の値(次のCRLの値)を設定したファイルである.
openssl ca -config openssl2.cfg -gencrl -crldays 365 -revoke usrcert.pem -out ca2crl.pem openssl crl -in ca2crl.pem -inform PEM -outform DER -out ca2crl.crl
openssl ca -config openssl.cfg -gencrl -crldays 365 -revoke ca2cert.pem -out cacrl.pem openssl crl -in cacrl.pem -inform PEM -outform DER -out cacrl.crl