鍵,証明書の生成

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の生成

Root証明書の生成

  1. 公開鍵証明書と鍵の生成
    PEM形式の公開鍵証明書(ファイル名:cacert.pem)と秘密鍵(ファイル名:cakey.pem)を生成する. ここでは,パラメータとして1024ビットのRSA鍵,有効期限365日を指定している. また,openssl.cfgは設定ファイルでデフォルトの値などOpenSSLの動作を指定するファイルである (サンプルの設定ファイルがOpenSSLの提供ファイルに含まれている).
    公開鍵証明書はRoot CAなので自己署名とする. ここで,秘密鍵の暗号化のためのパスワードを指定が必要となる.
    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
    
  2. PKCS#12ファイルの生成
    PEM形式の公開鍵証明書と秘密鍵からPKCS#12形式のファイル (ファイル名:cacert.p12,名称:rootca) を生成する.
    PKCS#12ファイル生成時には,パスワードの入力が要求される.cakey.pem生成時に指定したパスワードを指定する.また,証明書用の新たなパスワードの指定を行う.
    cat cacert.pem cakey.pem > cacert12.pem
    
    openssl pkcs12 -export -in cacert12.pem -out cacert.p12
     -name rootca
    
  3. 公開鍵証明書の生成
    PEM形式のファイルからX509形式の公開鍵証明書 (ファイル名:cacert.cer) を生成する.
    openssl x509 -in cacert.pem -inform PEM -out cacert.cer
     -outform DER
    

CA2証明書の生成

  1. 証明書署名要求と秘密鍵の生成
    PEM形式の証明書署名要求(ファイル名:ca2req.pem)と秘密鍵(ファイル名:ca2key.pem)を生成する. 秘密鍵を暗号化するパスワードの指定が必要になる.
    openssl req -config openssl2.cfg -newkey rsa:1024 -sha1
     -out ca2req.pem -keyout ca2key.pem
    
  2. 公開鍵証明書の生成
    証明書署名要求に対し,Root認証局CAによりPEM形式の認証局CA2の公開鍵証明書(ファイル名:ca2cert.pem)を生成する. このとき,CAの秘密鍵のパスワードが要求される.
    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進偶数桁の値を設定したファイルである.
  3. PKCS#12ファイルの生成
    PEM形式の公開鍵証明書と秘密鍵からPKCS#12形式のファイル (ファイル名:ca2cert.p12,名称:ca2) を生成する.
    PKCS#12ファイル生成時には,パスワードの入力が要求される.ca2key.pem生成時に指定したパスワードを指定する.また,証明書用の新たなパスワードの指定を行う.
    cat ca2cert.pem  ca2key.pem > ca2cert12.pem
    
    openssl pkcs12 -export -in ca2cert12.pem -out ca2cert.p12 -name ca2
    
  4. 公開鍵証明書の生成
    PEM形式のファイルからX509形式の公開鍵証明書 (ファイル名:ca2cert.cer) を生成する.
    openssl x509 -in ca2cert.pem -inform PEM -out ca2cert.cer
     -outform DER
    

ユーザ証明書の生成

  1. 証明書署名要求と秘密鍵の生成
    PEM形式の証明書署名要求(ファイル名:usrreq.pem)と秘密鍵(ファイル名:usrkey.pem)を生成する. 秘密鍵を暗号化するパスワードの指定が必要になる.
    openssl req -config openssl2.cfg -newkey rsa:1024 -sha1
     -out usrreq.pem -keyout usrkey.pem
    
  2. 公開鍵証明書の生成
    証明書署名要求に対し,認証局CA2によりPEM形式のユーザの公開鍵証明書 (ファイル名:usrcert.pem)を生成する. このとき,CA2の秘密鍵のパスワードが要求される.
    openssl x509 -req -days 365 -sha1 -CA ca2cert.pem -CAkey ca2key.pem
     -in usrreq.pem -out usrcert.pem
    
  3. PKCS#12ファイルの生成
    PEM形式の公開鍵証明書と秘密鍵からPKCS#12形式のファイル (ファイル名:usrcert.p12,名称:user1) を生成する.
    PKCS#12ファイル生成時には,パスワードの入力が要求される.usrkey.pem生成時に指定したパスワードを指定する.また,証明書用の新たなパスワードの指定を行う.
    cat mycert.pem  mykey.pem > usrcert12.pem
    
    openssl pkcs12 -export -in usrcert12.pem -out usrcert.p12
     -name user1
    
  4. 公開鍵証明書の生成
    PEM形式のファイルからX509形式の公開鍵証明書 (ファイル名:usrcert.cer) を生成する.
    openssl x509 -in usrcert.pem -inform PEM -out usrcert.cer
     -outform DER
    
  5. PKCS#12ファイルの生成
    認証局の証明書を含むPKCS#12形式のファイル (ファイル名:usr1certs.p12,名称:usr1certs) を生成する.
    PKCS#12ファイル生成時には,パスワードの入力が要求される.ca2key.pem生成時に指定したパスワードを指定する.また,証明書用の新たなパスワードの指定を行う.
    cat cacert.pem ca2cert.pem > cacerts.pem
    
    openssl pkcs12 -export -in usrcert12.pem -certfile cacerts.pem
     -out usr1certs.p12 -name usr1certs
    

PKCS#7形式ファイルの生成

公開鍵証明書を含むPKCS#7ファイルを生成する.

cat usrcert.pem ca2cert.pem > usrcertpath.pem

openssl crl2pkcs7 -outform DER -nocrl -certfile usrcertpath.pem
 -out usrcertpath.p7b

CRLの生成

証明書失効リスト (CRL) を生成する.

index.txtというファイルに失効リストが格納される(空のファイルを用意しておく). index.txt.attrにindex.txtにて管理する通番に重複を許すかどうかの設定を行う. "unique_subject = yes"(重複を許さない),または"unique_subject = no"(重複を許す)を記述する.

また,失効リストのシリアル番号を指定するファイルcrlserialが必要である. これは,1行で16進偶数桁の値(次のCRLの値)を設定したファイルである.

inserted by FC2 system