OpenSSLを使ったCAの構築

CAを構築するとはサーバやクライアント認証のための証明書を 発行することができるようにすることを意味します.

誤解してはならないのはネットワークサーバのように ネットワークに接続されたホストの特定のポートで接続を待ち受けて、 クライアントがそこに接続して、コマンドを発行し、 結果を得るためのサーバを作るわけではないということです.

確かに依頼者からCSRを受け取り、それに基づいて証明書を 発行しますが、この受け渡しのための手順が定められている わけではありません。WWWのCGIで受け渡しを行っても、 メールで手動で送ってもよいわけです。 この部分は規約があるわけではありません。

認証局を構築するのに必要なのは、鍵ペアを作り、証明書を作る ソフトウェアを用意すること、また構築する認証局自身の CA証明書を作るのに必要なものを作成することです。

OpenSSLのインストール

インストールは簡単です。 まずOpenSSLのパッケージを http://www.openssl.org/などから入手して、 以下のように展開してmakeするだけです。

% tar zxvf openssl-0.9.6.tar.gz
% cd cd openssl-0.9.6
% ./config
% make
% make test
% su
# make install

これにより内容が/usr/local/sslにインストールされます。

openssl.cnfの設定

opensslコマンドの動作を設定は/usr/local/ssl/openssl.cnfに行います. 以下に/usr/local/ssl/openssl.cnfの主要な部分を取り上げます。

[ ca ]
default_ca      = CA_default

[ CA_default ]
dir             = /usr/local/ssl/fclCA

policy          = policy_match

[ policy_match ]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

主要部分以外は省略しています.

[ CA_default ] の dirで指定したパスにCAで使う情報が 収められます.この設定で使うにはCA.shを以下のように して作っておくと便利です。

# cd /usr/local/ssl
# cp /misc/CA.sh bin

そして/usr/local/ssl/bin/CA.shの以下の部分を編集しておきます。

CATOP=/usr/local/ssl/fclCA

CA.shを実行する時には/usr/local/ssl/binにPATHが通っていなければ ならないので、このスクリプトに PATH=/usr/local/ssl/bin:${PATH} という記述を含めておいてもいいでしょう。

CAのポリシー

CAでは依頼者からCSR(証明書要求)を受け取って、 証明書を発行するわけですが、すべてのCSRに対して証明書を 発行するべきではありません。全く知らない人から来たCSRを 本人の身元を確認もせずに発行された証明書は信用度があまり ないからです。

それで、CAではどのようなCSR(証明書要求)に対して証明書を発行するか を決めた「ポリシー」を設定します.

CSRのSubjectの部分がどのような場合に証明書を発行するかについて、 以下のようにポリシーを設定できます。

matchCAの内容と一致しなければならない
optional無くてもよい
suppliedなければならない

以上の設定が終わったら実際にCAを構築します。

CA(認証局)の構築

CAを構築するとは鍵のペアを作り、サーバやクライアント認証のための 証明書を発行することができるようにすることを意味します. この際に依頼者からCSRを受け取り、それに基づいて証明書を発行しますが、 ネットワークサーバのようにどこかのポートで接続を待ち受けて、 コマンドを受け取って結果を返すというような作業をするわけでは ありません。

ルートCAを構築する場合

自分自身をルートCAとする場合は、以下の手順でCAを構築します。
  1. 秘密鍵と公開鍵のペアを作る
  2. 自己署名型の証明書を作る
OpenSSLではこの処理を、あるスクリプトを実行するだけで済みます. 上記のインストール方法で設定した環境で、 以下のコマンドを実行してください。

# /usr/local/ssl/bin/CA.sh -newca
CA certificate filename (or enter to create)
(なにも入力せずReturnキーを押す)
Making CA certificate ...
Using configuration from /usr/local/ssl/openssl.cnf
Generating a 1024 bit RSA private key
.........................................................++++++
.++++++
writing new private key to '/usr/local/ssl/fclCA/private/./cakey.pem'
Enter PEM pass phrase:(秘密鍵のパスフレーズを入力)
Verifying password - Enter PEM pass phrase:(もう一度入力)
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Fukuoka
Locality Name (eg, city) []:Kitakyushu
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FC Lab
Organizational Unit Name (eg, section) []:Lab
Common Name (eg, YOUR name) []:FC Lab CA
Email Address []:root@fc-lab.com

ここで入力したパスフレーズ(パスワード)はCAの秘密鍵のパスフレーズで 証明書発行の際に必要となるので忘れないようにしなければなりません。

以上の処理により /usr/local/ssl/fclCAに以下のものが作成されます。

cacert.pem自己署名型のCAの証明書
private/cakey.pem秘密鍵

秘密鍵は絶対に他の人に見られてはならないので

# chmod 600 /usr/local/ssl/fclCA/private/cakey.pem
# chmod 700 /usr/local/ssl/fclCA/private

を実行しておきます. 証明書が正しく作られているか確認するには以下のようにします。

# openssl x509 -in cacert.pem -text

信頼されたCAの下位のCAを構築する場合

上位のCAに証明されたCAを作る場合は以下のことが必要です。
  1. 秘密鍵と公開鍵のペアを作る
  2. CSRを作り、上位CAに送る
  3. 上位CAから証明書を受け取る
実際の手順は上位のCAによって異なる場合があると思いますが. 以下のような手順だと思います。 まず、秘密鍵と公開鍵のペアを作りCSRを作るには以下のコマンドを実行します。

# /usr/local/ssl/bin/openssl req -new -keyout cakey.pem -out csr.pem

これにより、秘密鍵がcakey.pemにCSR(証明書要求)がcsr.pemにできます. 上記の設定の場合は、 ここでできたcakey.pemを/usr/local/ssl/fclCAに置きます.

さらにcsr.pemを上位のCAに送って証明書を作ってもらいます。 上位CAから証明書を受け取ります。受ける証明書の形式はCAによって 異なると思いますので,これをDERのPEM形式したものを /usr/local/ssl/cacert.pemに置きます.

証明書の発行手順

あとはいずれCAの場合も、依頼者からCSRを受け取り、自分の秘密鍵で 署名した証明書を発行します。また必要な時には自分の証明書 (上位CAが発行した証明書か自己署名型の証明書)を渡すことにより、 CAとして運用することができます。

 

Copyright (C)2001 Takeshi FUJIKI