2009.12.23追記
このエントリは内容が古いかもしれません。
まず一番下を読んで頂くようお願いします。
==========================
現在稼動しているサーバーは、このblogのほかにwikiも動かしていて、そちらは主に私の恥ずかしい方面の日記を記している。誰にも非公開。自分だけ。けど、どこからでも読み書きしたい。で、今はこのwikiはSSL+Windows統合認証でセキュリティを保っているつもり(あくまでつもり)。
これに類することを新サーバでも行いたかったので、標記の通り。
とはいえ、これに関してはあまりにも完璧なサイトがあるので、その通りにやれば出来てしまった。
CentOS の Apache でクライアント証明書認証
追記することとして、あらかじめ、
# yum install mod_ssl
を行っておく。
注意点として、上記は証明書の有効期間を30年に設定しているが、これだと、途中で
entry 1: invalid expiry date
というエラーが出る。
2038年問題勃発
伝統的なUnixのC言語のtime関数の限界って 2038年にくるんだったよ。 ということは今年以降は30年を越えるような計算はすべて不正になってしまう訳ね。という訳で、CAの有効期間を20年とすることで取り合えず正常に処理はできましたが、このままでは2038年問題はその10年程度前に問題が顕在化するわな。
とのことで、私も20年にしておいた。
以上。
実際に使ってみた。
上記設定後に、httpsでログインしようとすると、証明書のインストール画面が出てくる。通常はここで適当に選んでいくと、なんかページが見えてしまうが、今回は見れない。


そこで、上記で作ったクライアント証明書ファイルをコピーしてきて、インストール。

ファイルをExportしたときに設定したパスワードを入力

再度、アクセスしようとするとなんか出てくる。

で、OKして、ブラウザをごにょごにょやれば、見れるようになる。
はずだったのに、失敗しました。今回、ブログを書きながら作業を進めていたので、まさかここまできて失敗するとは思いもしませんでした。あまりのかっこ悪さに寝込んでしまいました。(単に深夜作業になっていただけ・・・)
最初の問題は、
「この Web サイトのセキュリティ証明書には問題があります。: この Web ページで提示されたセキュリティ証明書は、有効期限が切れているかまだ有効ではありません。」
と出て証明書がエラーを吐いていること。

これは、なんだかよく分かりませんが、下の解決編の後、クライアントPCの日付を2日先に進めてみたら解消しました。証明書を作ると、有効期限が翌日から始まるみたいです。
で、次が本番。
証明書が、
「証明のパスの証明機関は証明書を発行する権限がないか、この証明書をエンドエンティティ証明書として使うことができないため、この証明書は無効です。」
とか出て不正な証明書扱いされて、うまくいかない。

これについてはのべ2日に渡ってググりまくったところ、下記のサイトが参考になった。
Apache + mod SSL / openssl.cnfの初期設定 / X.509v3 Basic Constraints
OpenSSLについて その4
結論から言えば成功したのだが、イマイチ理屈が分かっていないので、あくまで暫定版として、うまくいった方法を書き連ねてみる。
CentOS5 + Apache2 + mod_SSL でクライアント証明書認証をやってみる<解決編>
参考文献:CentOS の Apache でクライアント証明書認証
基本的にこれに沿って作業する。
(1)前回失敗した作業を全て削除
#cd /var/www/ssl
#rm -rf *
(2)openssl.cnfをCA証明書用に設定
# emacs /etc/pki/tls/openssl.cnf
[ usr_cert ]セクション
##basicConstraints=CA:FALSE
basicConstraints=CA:true
keyUsage = cRLSign, keyCertSign
nsCertType = sslCA, emailCA
(3)参考文献の「◆認証局CAの作成」を実行
(4)openssl.cnfをサーバー証明書用に設定
# emacs /etc/pki/tls/openssl.cnf
[ usr_cert ]セクション
####CA
#basicConstraints=CA:true
#keyUsage = cRLSign, keyCertSign
#nsCertType = sslCA, emailCA
####Server
basicConstraints=CA:FALSE
nsCertType = server
(5)参考文献の「◆apacheのサーバで使うサーバ証明書を作成」を実行
(6)openssl.cnfをクライアント証明書用に設定
# emacs /etc/pki/tls/openssl.cnf
[ usr_cert ]セクション
####CA
#basicConstraints=CA:true
#keyUsage = cRLSign, keyCertSign
#nsCertType = sslCA, emailCA
####Server
#basicConstraints=CA:FALSE
#nsCertType = server
####Client
basicConstraints=CA:FALSE
nsCertType = client,email
(7)参考文献の「◆クライアント側の証明書を作成」
以上。
で、完了。でも、オレオレ証明書・・・

2009.12.23追記
参考文献様の記事が修正されてます(リンクも変更になってます)。
CentOS の Apache でクライアント証明書認証(修正版)
私は試していないので、まだなんとも言えませんが、当エントリは必要なくなった可能性が高いです。ご注意を。