ここでは不特定多数に公開する WEB サーバーを対象としておりません。独自CA による WEBサイトの暗号化は限られた用途のみに限定する必要があります。
クライアント認証に必要な証明書を作成します。認証の際、ユーザーが提示しなければならない証明書です。クライアントが有効な証明書を提示しない限り、Apache はセッションを確立しないため、ツールを利用した総当り攻撃を無効にする事が出来ます。
ここではサーバー管理者が Apche WEBサーバー上で動作する管理ツール、例えば、phpMyAdmin などの WEBインターフェイスを外部ネットワークから接続する際にセキュリティ・レベルを引き上げる目的で利用します。
手順としてはサーバー署名要求と全く同じですが、CAで署名する際の nsCertType が異ります。 ユーザー証明書のカレントディレクトリを /etc/httpd/ssl/users とします。
ディレクトリを作成し、ディレクトリへ移動後、キーファイルと署名要求書を作成
Using configuration from /var/ssl/openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
........................++++++
writing new private key to 'privkey.pem'
-----
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) [JP]:
State or Province Name (full name) [Aichi]:
Locality Name (eg, city) [Nagoya]:
Organization Name (eg, company) [Creative.Unit.ZERO]:
Organizational Unit Name (eg, section) [Design]:
Common Name (eg, YOUR name) []:www.mydomain.net
Eweb Address []:korogi@mydomain.net
Please enter the following 'extra' attributes
A challenge password []:そのままenter
An optional company name []:そのままenter
Common Nameはサーバー名となります。
この作業で /etc/httpd/ssl/users 下に以下のファイルが生成されます。
../web_korogi_req.pem (クライアント署名要求書(CSR))
../web_korogi_key.pem (クライアント証明書の秘密鍵)
この署名要求書を 安全な方法でCA管理者に渡し証明してもらうことで証明書が発行されます。先ほどのサーバー証明書作成と同じ手順です。
CA管理者の立場で、サーバー管理者の署名要求に対して答えます。ここではCAとWebサーバーは同一ホストで管理しています。セキュリティ上、CAは別のサーバーで行うのが望ましいので実際には署名要求書と証明書をサーバー管理者とCA管理者でやり取りを行います。
先ほどのサーバー証明書と同じ手順でクライアント証明書用の設定ファイルを新規に作成します
[ usr_cert ]
nsCertType = client, email
Enter PEM pass phrase:****************
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Aichi'
localityName :PRINTABLE:'Nagoya'
organizationName :PRINTABLE:'Creative.Unit.ZERO'
commonName :PRINTABLE:'www.mydomain.net'
ewebAddress :IA5STRING:'korogi@mydomain.net'
Certificate is to be certified until Jul 7 10:46:50 2002 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
証明書署名要求の内容が正しければ Y
コミットするかに対し Y
この作業でサーバー証明書が CAのデータベースに登録され、サーバー証明書が生成されます。
/etc/httpd/ssl/users/web_korogi_cert.pem
証明書 mail_korogi_cert.pem はこのままユーザーに渡しても取り込むことが出来ません。pkcs12形式に変換します。その前に、CA証明書(公開カギ)をカレントディレクトリにコピーしておきます。
このCA公開鍵を梱包する形でpkcs12形式のユーザー証明書に変換します。
-name はこの署名請求段階で入力したcommon name で、-caname はCA作成自のcommon nameになります。
この作業で
/etc/httpd/ssl/users/web_korogi_cert.p12
に変換されます。
このファイルをクライアントがブラウザに取り込む事になります。pkcs12形式の証明書ファイルはNetscape,IE4.0以降での利用が可能です。
この証明書はサーバーとのやりとりに必要な証明書、ユーザーキー、自CA証明書が含まれています。ここで紹介しているポリシーに基づき、この証明書は外部からサーバー管理者が接続する際に利用する証明書となります。
ここまでの作業で作成された書類は以下の通りです。
サーバー証明書と秘密鍵
/etc/httpd/ssl/cert.pem
/etc/httpd/ssl/privkey.pem
クライアント認証に必要なユーザー証明書と秘密鍵
/etc/httpd/ssl/users/web_korogi_cert.pem
/etc/httpd/ssl/users/web_korogi_key.pem
管理者が接続時に使用する pkcs12形式証明書
/etc/httpd/ssl/users/web_korogi_cert.pk12
以上が準備できたら、Apache 側で設定を行います。