2012年5月6日日曜日

要求のエンティティが大きすぎるため、ページを表示できませんでした。

クライアント認証の設定を行ったWebサイトでのお話。

環境
Windows Servre 2008 R2 Standard
・IIS7.5
SSL設定あり。クライアント証明書を要求する設定。

このサイトに対して、アクセスすると最初は良いのだが、
適当な時間放置してから再度操作を行うと、次のエラーが表示されるようになってしまった。

<エラー内容>
要求のエンティティが大きすぎるため、ページを表示できませんでした。

<回避策>
IISのこのプロパティを変更すれば大丈夫なよう。
IISマネジャーで対象サイトを選択

構成を選択

system.webserver/ServerRuntime/
と辿る。

uploadreadaheadsizeの値を大きくする。

・どのぐらい値を変更すれば良いのかが分からない。
・uploadreadaheadsizeの値を極端に小さくして、再現できたので
検証方法、対処方法がこれだけで済むのかが不明。
・web.configに書き込まないほうが良い?
といった課題はまだあるので
困っている人は参考程度にしてください。

<参考サイト>
http://technet.microsoft.com/ja-jp/library/cc737382(WS.10).aspx
http://forums.iis.net/p/1169257/1949057.aspx

ちなみに
"要求のエンティティが大きすぎるため、ページを表示できませんでした。"
ではなく
"Request Entity Too Large"
で探したほうが色々見つかった。
エラーメッセージをそのまま検索するとこはよくあるのだが、
英語にしたほうが見つかりやすいとは…
また一つ学んだ。

IISでのクライアント認証


WindowsServerにてCAを立ち上げ、それを利用してクライアント認証を行うとすると
1.クライアントにServerに要求を投げてもらう。
2.Serverで管理者が代理要求をして、秘密鍵をクライアントに配布する
の2パターンがあると思う。

1.だとクライアントに面倒な作業が入るし、
https://localhost/certsvr
の画面を公開しても良いのかという疑問と不安もある。
何よりあの画面はとっつきにくい。
その代わり、参考サイトが結構ある。

2.だと秘密鍵をどうやって、クライアントに渡すのか、
渡した秘密鍵が複製されないかなどといいた危険はあるが、
クライアントでの作業が少ないので、マニュアルの作成などが不要というメリットもある。
こちらだと参考となるサイトが見つからなかった。
なので覚書程度に、MSDNフォーラムでのやり取りをまとめてみた。
イメージとしては、シス担が証明書の要求・作成・配布をマニュアルで行なって
ユーザー(クライアント)には秘密鍵のインポートだけやってもらう感じ。

[テスト環境]
<WebServer>
・WinServer2008R2 Standard SP1 x64
IIS 7.5  自作サーバー証明書セット済み
Active Directory 証明書サービス追加済み
※クライアント認証が必要なWebサイトあり。

<クライアント>
・WinXP SP3 x86

1.Serverでがhttps://localhost/certsvr に接続してクライアント認証証明書を要求
  ★このとき、秘密キーをエクスポートできるようにして設定する。
2.Severの自作CAにて、保留中の要求を確認したら発行する。
3.発行後、秘密鍵をエクスポートする。………☆
4.出力した秘密鍵をクライアントPCに配布。
5.クライアントPCにて、☆でエクスポートした秘密鍵をダブルクリックして、
  証明書ストアにインポート。証明書ストアの"個人"に証明書をインポートできる。
6.クライアントPCのIEにて、https://WebServer/XXXX/XXX.aspx (仮)に接続
7.証明書を要求するポップアップが表示されるので、☆でインストールしたクライアント証明書を選択する。
8.接続OK!!!!!

クライアント認証が必要なWebページの設定や、1.のやり方は
下記の参考サイトをみてみてください。

<参考サイト>
http://msdn.microsoft.com/ja-jp/library/cc402157.aspx
http://d.hatena.ne.jp/replication/20100802/1280928631

上のままだと、WebサイトとCAが同じ所にあるので、非常にまずい。
次の目標はCAをWebサイトとは関係のない、サーバーに立ち上げて運用する
より現実的な方法をまとめあげることだ。

自宅でまとめているので、画面のハードコピーなどはありません。