簡易環境構築

次のスクリプトを利用して、簡単に証明書生成環境を構築します。

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] を入力し、次の操作をします。

  1. bin/cert-mkcnf.sh にて中間認証局用の設定を実施する。
  2. ルート認証局に「request.csr」ファイルを渡す。
  3. 【ルート認証局での操作】bin/cert-sign.sh --type ca 【受け取ったrequest.csrファイル】
  4. ルート認証局より、生成された【request_signed.pem, request_signed.crt】を受け取る。
  5. 受け取ったファイルをそれぞれ、【cacert.pem, cacert.crt】にリネームして配置する。

以降、署名や失効管理はルート認証局と同様となります。 ★ここで構築する中間認証局は、末端の認証局となり、CAに対する署名はできません。 CAに対する署名が必要な場合は、ルート認証局にて署名の際、openssl_ca.cnf ファイルの basicConstraints の pathlen: 0 を削除してから署名してください。

サーバー証明書

  1. 次の手順で CSR を生成します。
    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アドレスを指定してください。)
  2. 認証局に、生成された 「request.csr」ファイルを渡す。
  3. 【認証局での操作】bin/cert-sign.sh --type server --dns1 【ドメイン名】 【CSRファイル】 ※ドメイン名が複数ある場合は、--dns2, --dns3 等を指定してください。
  4. 認証局より、生成された【request_signed.pem, request_signed.crt】を受け取る。⇒これがサーバー証明書となります。

クライアント証明書

  1. 次の手順で CSR を生成します。
    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: <--秘密鍵のパスフレーズ
    ..(省略)..
    ■以下、クライアント証明書の情報を入力します。
  2. 認証局に、生成された 「request.csr」ファイルを渡す。
  3. 【認証局での操作】bin/cert-sign.sh --type client【CSRファイル】
  4. 認証局より、生成された【request_signed.pem, request_signed.crt】を受け取る。
  5. 下記コマンドを実行して pkcs12 形式ファイルを生成する。
    bin/cert-mkpkcs12 request_signed.pem private/privkey.pem 【任意の名前】
    →生成された output.p12 ファイルがクライアント認証で用いるファイルとなります。

クライアント認証のためのサーバー設定(Apache)

クライアント証明書に署名した認証局が、中間認証局の場合、上位認証局の証明書を連結したファイルを作成します。

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 [証明書ファイル]

トップ   差分 バックアップ リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS