QA@IT

クライアント証明書による認証が必要なWebサイトをIISで構築する方法について

13890 PV

お世話になります。
私の目的はクライアント認証が必要なWebサイトをIISで構築し、そのノウハウを理解することです。
様々なサイトを参考にし、最終的にクライアントPCのブラウザからURLを叩くところまで行いました。
しかし、結果は「HTTP403エラー 指定した資格情報を使用して、このディレクトリまたはページを表示するアクセス許可がありません」
というエラー画面が表示され、どうやら認証がうまくいっていないようです。

初めての経験なうえ、私が知識不足なこともあり、設定手順が正しいのか、また、どうしてこのような設定をするのかというのが分かりません。
お恥ずかしい限りですが、結果にたどり着くまでの設定の過程や私の疑問点について何か手がかりになるようなご指摘をして頂きたいです。

以下に私が行ったことを記します。

1.SSLサイトの作成
⇒IISのSSL設定でクライアント認証を許可するためにHTTPSのサイトを作成しました。
・自己署名入りサーバー証明書の作成
・作成した自己署名入り証明書をバインドしたHTTPSポートのWebサイトを作成
・クライアントPCからブラウザ上で確認(この時点ではブラウザでサイトの参照を確認できた。ただしURL欄に証明書エラーのメッセージ)

2.IISでSSL設定
⇒「クライアント証明書が必要」という設定をしました。
IISマネージャで対象のサイトを選択し、操作ビューから「SSL設定」を選択。
SSLが必要にチェックを入れてクライアント証明書のラジオボタンで「必要」を選択し「適用」をクリック

3.ブラウザから証明書をインストール
・1で作ったサイトのURLをクライアントPCのブラウザで叩いて証明書を表示させ、全般タブから証明書をインストール

4.インストールした証明書をエクスポート(これがクライアント証明書になる?)
・Internet Explorerのインターネットオプションを開く
・コンテンツタブを選択して「証明書」ボタンを押す
・3でインストールした証明書を選んで、「Base 64 encoded X.509」形式でエクスポートする

(以下5、6の手順は http://blog.progfast.jp/labs/index.php/arts/iis7-client_cert-config/ を参考にしました)

5.エクスポートした証明書の編集
・4でエクスポートした証明書をテキストエディタで開く
・「--BEGIN CERTIFICATE--」と「--END CERTIFICATE--」の行を削除
・改行タブを削除して1行になるように編集

6.IISでクライアント証明書をマッピング
・IISを立ち上げて対象のサイトを選択した状態で、機能ビューより「構成エディター」を選択
・セクションのパスをsystem.webServer/security/authentication/iisCertificateMappingAuthenticationと指定
・enabled:をtrueに変更
・oneToOneCertificateMappingsEnabled: をtrueに変更
・oneToOneMappingsを以下のように設定
  ⇒certificate:5でエクスポートして編集した文字列を貼り付ける
  ⇒enabled:Trueを設定
  ⇒password:サーバーマシンの任意のWindowsユーザーのログインパスワードを設定
  ⇒username:上記のpasswordで設定したユーザーのユーザー名を設定

7.ブラウザで確認
⇒認証ができませんでした

私が分かっていないのは
・自己署名入り証明書は公的な認証ではないのでクライアント認証がそもそもできないのか
・そもそもクライアント証明書の取得はできているのか
・IISでのクライアント証明書のマッピング設定におけるpasswordとusernameの設定はサーバーのユーザーで合っているのか

説明が分かりにくいところがあるかもしれません。ご迷惑お掛け致します。
なにか少しでもゴールにたどり着く手がかりがつかめたらという思いです。
クライアント認証について詳しい方ございましたら、ご指導、ご指摘お願い致します。

回答

「自己署名入り証明書」といっているのはおそらく「サーバー証明書」のことですよね?

クライアント認証をするには、「クライアント証明書」をCAから発行して、それをクライアントにインストールします。それはやっていますか?

ちなみにCAはパブリック、プライベートどちらでも可能です。

あとユーザーマッピングに進む前に、3が終わった時点でクライアント認証自体はできるはずなので、3の段階で確認してみるとよいです。

編集 履歴 (0)
  • 回答ありがとうございます。
    なんとか解決できました。
    blunder3さんのいうように、クライアント証明書、ルート証明書の発行に問題があったようです。
    今回はWindows環境でCAや証明書など全て自前によるクライアント認証の実現を目指しておりましたが、プライベートCAによる認証をする場合もActive Directoryの証明機関ツールを利用する必要がありました。
    -

なんとか解決できたので、この場を借りて報告させていただきます。

今回はWindows Server2016をOSとするサーバーにクライアント認証が必要なWebサイトを構築し、
ブラウザで確認をするということをやっていました。

その環境構築の手順は以下の通りとなります。

1.IISにHTTPSでバインドしたサイトを用意します
・サーバー証明書は自己署名入り証明書を作成しました

2.サーバーにActiveDirectory証明書サービスの役割をインストールします
・サーバーマネージャーの「役割と機能の追加」からインストールします
・機能は「証明機関」と「証明機関Web登録」の2つをインストールします
・インストール後、サーバーマネージャの「通知」から「Active Directory証明書サービスを構成する」へと
進みます
⇒「証明機関Web登録」をインストールするとIISのDefault Web Site配下にCertSrvというアプリケーションが
できます

3.クライアントから「https://hostname/certsrv」にアクセスします

4.「証明書を要求する」>「証明書の要求設定」と進み、フォーム画面を入力して要求を送信します
・証明書の種類は「クライアント認証証明書」
・CSPは「Microsoft RSA SChannel Cryptographic Provider」を選択
・「エクスポート可能なキーとしてマークする」にチェックを入れる
以上の設定で要求を作成、送信しました

5.サーバー側でWindows管理ツールより「証明機関」を開き、保留中の要求から4の手順で要求した証明書を発行
・証明書を右クリックして「すべてのタスク」>「発行」で発行できました

6.再び3の手順のサイトにアクセスし、発行されたクライアント証明書をインストール
・「保留中の証明書の要求の状態」へ進むとインストールできる証明書が表示される
・選択するとルート証明書の保存を訊かれる

7.保存したルート証明書をクライアントにインポート
・(IE11の場合)ブラウザからインターネットオプション > コンテンツ > 証明書と進む
・「インポート」をクリックして6の手順で保存したルート証明書を「信頼されたルート証明機関」にインポート

8.6の手順に戻ると、クライアント証明書のインストールができる

9.サーバーにクライアント認証マッピング機能をインストール
・役割と機能の追加からIIS > Webサーバー > セキュリティ > IISクライアント証明書マッピング認証を選択

10.Webサイトとクライアント認証文字列をマッピングする
・(IE11の場合)ブラウザからインターネットオプション > コンテンツ > 証明書と進む
・8の手順でインストールしたクライアント証明書を選択してエクスポートする
・秘密キーはエクスポートしない
・Base64encodedでエクスポート
・エクスポートしたファイルをテキストエディタで開いて編集
⇒「-----BEGIN CERTIFICATE-----」の行を削除する
⇒「-----END CERTIFICATE-----」の行を削除する
⇒改行タブをすべて削除する
・編集した文字列をコピー
・サーバーでIISを開いて対象サイトの構成エディターを開く
・セクションを指定「system.webServer\security\authentication\iisClientCertificateMappingAuthentication」
・enabledをTrue
・manyToOneCertificateMappingEnabledをTrue
・oneToOneMappingsを以下のように指定する

certificate:クライアントからマッピング依頼されたクライアント認証証明書の認証文字列を貼り付ける
enabled:True
password:サーバーの任意のローカルユーザーのパスワード
userName:passwordで入力した任意のローカルユーザーのユーザー名

11.サイトのSSL設定をする
・IISで対象サイトを選択して、「SSL設定」へ進む
・SSLが必要にチェックを入れて、クライアント認証は必要を選択 変更を適用する

12.クライアントから確かめる
・証明書をインストールしているクライアントからブラウザでサイトを参照できることの確認
・証明書をインストールしていないクライアントからはHTTP403エラーが表示されることの確認

以上で確認ができました

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。