IIS7でSSLクライアント認証

先週、あるトレーニングでお話をさせていただいていたら、鼻から液体がタラーっと出てきました。
鼻水が出てきたと思い、ごまかすように手で覆ったら、手が真っ赤に!
そう、鼻血がでてきたのです。おかげで15分程度、受講してくださった皆さんには
待ちぼうけにさせてしまいました。待っててくださった皆さん、すみませんでした。


今日は、IISで利用可能なSSLクライアント認証に関連する情報を紹介します。
SSLというと通信の暗号化、というイメージが強いですが、SSLの仕組みを利用して
接続しているユーザーの認証(クライアント認証)を行うことが可能です。
以前から、Windowsでも実装されている機能ですが、クライアントコンピューターに証明書を
あらかじめインストールしておかなければならない、という面倒くささから、私の周りでは
あまり使っているという話を聞きません。

そんなわけで、しばらく気がつかなかったのですが、
あるお客様のところで私が登壇させていただいているトレーニングに、IIS6.0を使って
SSLクライアント認証を実際に試していただく、というのがあります。
そこで、気がついたのですが、
IIS7.0からSSLのクライアント認証を行うためのユーザーインターフェイスがなくなっていたのですね。
そんなわけでマイクロソフトのTechNetでは、代替の方法が説明されています。

■IISクライアント証明書マッピング認証
http://technet.microsoft.com/ja-jp/library/ee431606.aspx

もうちょっとシンプルな設定方法はないのかな、と思っていたら、
IISのユーザーインターフェイスから設定する方法があるようだ、ということに気がつきました。

全体を把握できるよう、ひととおりの流れをここに記しておきます。

1.必要なコンポーネントをインストールする

サーバーマネージャーからIISとActive Directory証明書サービスの2つをインストールしてください。
IISは、IISクライアント証明書マッピング認証も一緒にインストールします。

IISCert1

2.IISを利用するユーザーに証明書を発行しておく

IISを利用するユーザー全員に、証明書を発行します。
発行する証明書の種類は、「ユーザー証明書」です。

3.証明書から文字列を抽出する

証明書のcerファイルをメモ帳で開くと、文字列が表示されます。
この文字列から、最初と最後の行を取り除き、さらに改行を取り除いた文字列を用意しておきます。

こちらがcerファイルをメモ帳で開いた様子
IISCert5

こちらが最初の行と最後の行を取り除き、改行も取り除いた様子
(見た目には2行になっていますが、メモ帳が勝手に改行しているだけです)
IISCert6

クライアントにインストールされたcerファイルから文字列を抽出するのは大変なので、
証明書サーバーの[証明機関]管理ツールから、それぞれの発行した証明書を開いて、
cerファイルにエクスポートすると、一カ所から、それぞれのコンピューターにインストールされた
証明書のcerファイルにアクセスできます。

IISCert2

4.IISの管理ツールでSSLクライアント認証を設定する

IISの管理ツールからSSLクライアント認証を設定するWebサイトを開き、[構成エディター]を開きます。

IISCert7

構成エディターから、[セクション]で
system.webServer/security/authentication/iisClientCertificateMappingAuthentication
を開くと、クライアント認証の設定画面が出現します。

IISCert8

ここで、クライアントと証明書のマッピングを設定します。設定項目は以下の通りです。
・enabled : True (証明書マッピングの有効/無効)
・oneToOneCertificateMappingsEnabled : True (1対1の証明書マッピングの有効/無効)
・oneToOneMappings
・certificate : 手順3で抽出した文字列を貼り付ける
・enabled : True
・password : 証明書に関連づけるユーザーのパスワード
・username 証明書に関連づけるユーザーの名前

こちらが、oneToOneMappingsの部分をクリックしたときに表示される画面

IISCert9

OneToOneMappingsの部分については、認証を行うユーザー分だけ繰り返します。面倒くさいですね。

そして、すべての登録が完了したら、最後にIISの管理ツールからWebサイトの[SSL設定]を開き、
SSLクライアント認証を有効にします。

IISCert02

これで、できあがりです。
実際にWebサイトにアクセスすると、クライアントコンピューターにインストールされている証明書が表示されます。
証明書の確認画面で[OK]をクリックすると、その証明書を使って認証を行い、
証明書に関連づけられたユーザーとして、 Webサイトにアクセスしたことになります。

IISCert03

面倒でしたね。お疲れ様でした。