クライアント認証
※SSLについては素人なので間違ってたらごめんなさい。
今、HTTPSのクライアント認証の事をちょっと調べてます。
クライアント認証とは?
SSLのサーバー認証は「サーバーはxxx.example.comである」という事を証明するための仕組みであるのに対して、クライアント認証はアクセスしている「ブラウザ(ユーザーエージェント)がxxxxxxxさん」であることを証明します。
サーバー認証はサーバーの設定が必要であるのに対して、クライアント認証はブラウザの設定が必要です。
(実際に利用する際には、大抵の場合、サーバー側の設定も必要になります。)
どうやってクライアント認証するのか
クライアントに秘密鍵とサーバー側で署名した公開鍵のセットを設定し、サーバーにサーバーの公開鍵(サーバー認証に使用しているものである必要はありません)を設定します。
クライアント認証に使用する鍵のセットとサーバー認証に使用する鍵のセットを関連付ける必要はありません。
Basic認証やDigest認証では「誰がアクセスできるか」を設定しますが、クライアント認証の場合には「証明書がサーバー鍵で署名されているかどうか」を確認するだけです。
例えば、Basic認証の場合には、「アリスさんとボブさんのアクセスを許可」という感じで設定を行いますが、クライアント認証の場合には、「チャーリーが許可した人」と漠然な感じで認証されます。(この場合に、チャーリーはサーバーの秘密鍵を持っています)
これは例えば、Basic認証の場合には設定の変更を行う場合にはサーバー上の設定(=データベース)の変更が必要ですが、クライアント認証の場合にはサーバーの設定を変更する必要が無いことを意味しています。
一度認証したユーザーをアクセス拒否にする場合には、ユーザーの鍵のシリアル番号を利用して拒否することができるそうです。(自分は実際そのようなことをしたことはないですが)
何を調べてるのか?
SSLを利用するにはクライアント認証のみで利用出来るはずなのですが(例えばSSHとか)、Apacheではその設定ができないようです。
ひょっとしたら、HTTPSの仕様でサーバー認証が必須なのかもしれません。(そこまで調べきれてないです)