次のスクリプトを利用して、簡単に証明書生成環境を構築します。
https://ehobby.jp/data/public/ca.tar.gz
以下、/var/lib/ssl/ca 配下に環境を構築するものとして記載します。
mkdir /var/lib/ssl cd /var/lib/ssl wget https://ehobby.jp/data/public/ca.tar.gz tar zxvf ca.tar.gz mv ca rootca cd rootca ./cert-cainit.sh 1, 認証局の証明書管理環境を初期化します。 継続してよろしいですか? [y/n] <--y[Enter] 2. 秘密鍵を生成します。 継続してよろしいですか? [y/n] <--y[Enter] Generating RSA private key, 2048 bit long modulus ..................+++ .............................................+++ e is 65537 (0x10001) Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ Verifying - Enter pass phrase for ..(省略)../priv.pem:<--秘密鍵のパスフレーズ 3. CSR (証明書署名要求) を作成します。 継続してよろしいですか? [y/n] <-- y[Enter] Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ ...(省略)... ■以下、ルート認証局の情報を入力します。 ※多くのルート認証局では、都道府県名、市町村名は指定されていないようです。 国名 (2文字コード) [JP]: <--国名(日本であればJP) 都道府県名 []:[] <--都道府県名([Enter]で指定なし) 市町村名 []:[] <--市町村名([Enter]で指定なし) 組織名 [Ehotty]:[] <--組織名 部門名 []:[] <--部門名([Enter]で指定なし) コモンネーム(名前, サーバーホスト名など) []:[] <--例: XXX Root CA Eメールアドレス []:[] <--Eメールアドレス([Enter]で指定なし) パスワード [8-20文字] (空でも良い) []:[] <--オプションパスワード([Enter]で指定なし) オプション国名 (空でも良い) []:[] <--オプション国名([Enter]で指定なし) 4. 自己署名します。 継続してよろしいですか? [y/n]:[] <--y[Enter] Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ
次のコマンドにて、CPSの情報や、CRL、OCSP のURL等の情報を設定します。 詳細は、コマンドのヘルプを参照ください。
bin/cert-mkcnf.sh
次のコマンドで指定された、CSRに署名します。
bin/cert-sign.sh [CSRファイル]
サーバー証明書の場合は、--dns1 ドメイン名 の指定が必要です。 その他、オプションについては、 次のコマンドを確認ください。
bin/cert-sign.sh --help
※署名した証明書は、newcerts 配下にも格納されます。
署名した証明書を失効させる場合、次のコマンドで失効させます。
bin/cert-revoke.sh [失効させる証明書]
※CRLファイルが、crl/latestcrl.crl に生成されるので、 適切な場所に配置して、Web経由で取得できるようにしてください。
※CRLファイルのみ生成したい場合は、次のコマンドで生成可能です。
bin/cert-mkcrl.sh
基本的にルート認証局と同様ですが、自己署名ではなく、 ルート認証局に署名してもらいます。具体的には、
4. 自己署名します。 継続してよろしいですか? [y/n]:[]
にて n[Enter] を入力し、次の操作をします。
以降、署名や失効管理はルート認証局と同様となります。 ★ここで構築する中間認証局は、末端の認証局となり、CAに対する署名はできません。 CAに対する署名が必要な場合は、ルート認証局にて署名の際、openssl_ca.cnf ファイルの basicConstraints の pathlen: 0 を削除してから署名してください。
cd xxxxx <--任意のディレクトリ wget https://ehobby.jp/data/public/ca.tar.gz tar zxvf ca.tar.gz mv ca server cd server mkdir private bin/cert-mkcsr.sh ..(省略)../privkey.pem を生成します。[y/n] <--y[Enter] Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ Verifying - ..(省略).. <--秘密鍵のパスフレーズ 秘密鍵(..(省略)..)を生成しました。 Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ ..(省略).. ■以下、サーバー証明書の情報を入力します。 コモンネームには、ドメイン名を指定してください。 (ドメイン名が無い場合は、固定IPアドレスを指定してください。)
cd xxxxx <--任意のディレクトリ wget https://ehobby.jp/data/public/ca.tar.gz tar zxvf ca.tar.gz mv ca server cd server mkdir private bin/cert-mkcsr.sh ..(省略)../privkey.pem を生成します。[y/n] <--y[Enter] Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ Verifying - ..(省略).. <--秘密鍵のパスフレーズ 秘密鍵(..(省略)..)を生成しました。 Enter pass phrase for ..(省略)../privkey.pem: <--秘密鍵のパスフレーズ ..(省略).. ■以下、クライアント証明書の情報を入力します。
bin/cert-mkpkcs12 request_signed.pem private/privkey.pem 【任意の名前】→生成された output.p12 ファイルがクライアント認証で用いるファイルとなります。
クライアント証明書に署名した認証局が、中間認証局の場合、上位認証局の証明書を連結したファイルを作成します。
cat rootca.pem ca.pem > chain.pem
Apacheの場合、以下の設定をします。
SSLCACertificateFile /var/lib/ssl/ca/chain.pem $ <- 認証局の証明書ファイル SSLCARevocationFile /var/lib/ca/crl/latestcrl.crl # <- CRLのファイルパス <Directory 【クライアント認証が必要なパス】> SSLRequreSSL SSLVerifyClient require SSLVerifyDepth 10 </Directory>
次のコマンドで、各種証明書の内容を確認できます。
bin/cert-show.sh [証明書ファイル]