IISとクライアント証明書の組合せ まとめ


IIS6/7とクライアント証明書を組み合わせて使う場合の注意点について、いくつかポイントをまとめ

クライアント証明書は、ログインユーザー毎にインストールできる為、ケースによってはユーザーの特定が出来て便利です。
証明書マッピングなどで、Windowsアカウントなどとの紐付することもできますし、証明書が入っているPCからだけしか操作を許可しない事も可能。

ただし、次のような点を合わせて考慮しておく必要がありましたので、まとめておきます。

ステータスコード:413への対処

IIS+クライアント証明書の組合せでサイトを構成しアプリを配置した後、操作中に「Internet Explorer ではこのページは表示できません」が表示されたり、「画面が真っ白になる」事がありました。エラーハンドルなどにもよると思いますが、経験的に次の場合に発生しました。

  • 数百KByte~数十MByteのファイルアップロード
  • 数十KByteのXMLアップロード

この場合、IISのWebログには 413 が記録されてます。このステータスコード 413 をキーで探すと、次の対策が有効とわかりました。
どうやらデーターをアップロード中にクライアント証明書の再ネゴシエーションが発生してしまった場合、それに伴うデッドロック回避のための仕組みが動作してしまうのが原因のようです。

プロパティ名から考えるに、常にクライアント証明書のネゴシエーションを行うことで、アップロード中などの再ネゴを防止する設定と考えらえます。

SSLAlwaysNegoClientCert プロパティを設定する

SSLAlwaysNegoClientCert
  Metabase Path
    /LM/W3SVC/n
    /LM/W3SVC

  Value
    FALSE (default)
      ↓
    TRUE

ただし上記の場合、設定がサイト単位になるので、クライアント証明書を常に要求する「サイト」への適用のみが可能となります。
そうではない場合、例えば、特定のアプリケーションや仮想フォルダだけクライアント証明書を要求したい場合には使えません。
サイト設計とのオーダーになってしまうのが難点です。

再ネゴの発生タイミング緩和のために、次のプロパティ値もあるので、場合によっては検討してもいいのかもしれません(TechNetでは、設定時の注意事項なども書かれてました)

UploadReadAheadSize プロパティ

基本は設定しないほうが良い模様(前出でダメだった場合に、検討)
後述のリンク先を参照ください。

なお、IIS7でも同じように設定が出来ました。IIS6からの変更点として格納先の変更はあったようですが、IIS6と同じ方法でアクセスは可能です。

サイト名・概要 サイトURLなど
クライアントが要求を再ネゴシエートできず、HTTP 413 エラーが返される
(Microsoft TechNet )
http://technet.microsoft.com/ja-jp/library/cc737382(v=WS.10).aspx
SSLAlwaysNegoClientCert Metabase Property
(Microsoft TechNet)
http://technet.microsoft.com/ja-jp/library/cc778630(v=ws.10).aspx
UploadReadAheadSize Metabase Property
(Microsoft TechNet)
http://technet.microsoft.com/ja-jp/library/cc728324(v=ws.10).aspx
IIS 資料。
(NetDriveさん)
http://www.netdive.jp/iis.html
IIS 6.0 と IIS 7.0 のセキュリティに関する変更点
(Microsoft TechNet)
http://technet.microsoft.com/ja-jp/library/ee890774.aspx

WebDAV利用時の問題点

IISでWebDAV利用+クライアント証明書の場合、48KB以上のファイルがPUTできない問題が発生する「ことが」あります(「ことが」を強調したのは、WebDAVクライアントによって問題が発生しなかった場合があった為)。

検証結果は、Windows2003WebEditionのIIS6.0をデフォルト状態で使った場合。

WebDAVサーバー WebDAVクライアント 48KB以上のファイルがPUTできるか?
IIS6.0 InternetExplorer 6.0 (Windows XP) できない
IIS6.0 WebDrive できる
IIS6.0 CarrotDAV できる

なぜWebDAVクライアントによって違いが出るのかは確認していません。
未検証ですがケースが近いので、InternetExplorerをクライアントとして使う場合には、前出の”SSLAlwaysNegoClientCert設定”は有効だと思います。

サイト名・概要 サイトURLなど
IIS 資料。
(NetDrive)
http://www.netdive.jp/iis.html
IISのWebDAVサービスでサイズの大きなファイル(48K)が413エラーになる
(中の技術日誌)
http://naka.wankuma.com/site/column/windows2003/00003.htm

Comments are closed.