Windows 認証の Web サイトで、突然認証ダイアログが出るようになる問題について
はじめまして。
日本マイクロソフト、デベロッパーサポート DSI の平井です。入社以来、主に IIS、MSMQ、BizTalk Server などのサーバー系製品を担当してきました。
今日は、ワールドワイドでのお問い合わせが多く、かつインパクトの大きい現象についてお知らせしたいと思います。以下の条件にすべて合致する環境を運用されている方は、是非そのまま最後まで目を通してください。
条件
IIS 7.5 が動作している
具体的には、以下の OS で IIS をインストールしている環境となります。・Windows 7
・Windows 7 SP1
・Windows Server 2008 R2
・Windows Server 2008 R2 SP1IIS の設定で Windows 認証を有効にしている
Windows 認証は NTLM 認証と Kerberos 認証の 2 種類がありますが、Kerberos 認証が対象となります。両者の違いについてはここでは割愛します。アプリケーションプールの実行アカウントが ApplicationPoolIdentity となっている。
上記条件をすべて満たした環境では、以下の技術文書に記載された問題が発生する可能性があります。
文書番号: 2545850
タイトル: Users cannot access an IIS-hosted website after the computer password for the server is changed in Windows 7 or in Windows Server 2008 R2
https://support.microsoft.com/kb/2545850/en-us
*機械翻訳
https://support.microsoft.com/kb/2545850/ja-jp
現象
技術文書 2545850 の問題が発生すると、ブラウザーで該当の Web サイトにアクセスすると認証ダイアログが表示されるようになりますが、以下のような特徴があります。
- 昨日まで問題なかったのに、今日になって突然認証ダイアログが表示されるようになった
- 表示された認証ダイアログに、正しいアカウント情報を入力しても認証が通らない
- アプリケーションプールのリサイクルや、IIS の再起動をしても現象が回避できない
- IISのマシンの再起動を行うことで現象を回避することができたが、しばらくするとまた同じ状況になる
もし、上記の条件に合致する環境や、上記の特徴の現象に遭遇したことがあれば、早急に以下の回避方法を検討してください。
回避方法
一時的な回避方法
IIS のマシンを再起動することで、一時的に本現象を回避することができます。しかし、再度この現象が発生する可能性があります。
恒久的な回避方法
技術文書 2545850 から、修正プログラムを入手し適用します。(マシンの再起動が必要です)
もし修正プログラムの適用がすぐにできない場合は、アプリケーションプールの実行アカウントを既定の ApplicationPoolIdentity から Network Service に変更することでも、本現象を恒久的に回避することができます。 この方法の場合、マシンや IIS の再起動を行わずに現象を回避することができます。ただし、アプリケーションプールのリサイクルが発生します。
なお、ApplicationPoolIdentity から Network Service に変更したことによる影響は、ApplicationPoolIdentityのアカウントに対して何か設定をしていない限り、低いものと考えられます。
再現方法
この問題を意図的に発生させて、上記の回避方法の有効性を確認することができます。
*検証環境で確認するようにしてください。
事前確認
- Windows 認証のみ有効にし、該当のアプリケーションプールの実行アカウントが ApplicationPoolIdentity であることを確認します
- クライアントからIIS 上のファイルにアクセスし、認証ダイアログが表示されることなく Kerberos 認証が行われていることを確認します
*以下の技術文書に記載の ASP ファイルを実行することで、Kerberos 認証が行われたかどうか確認できます。ただし、この ASP ファイルを実行するためには IIS 役割サービスの [ASP] がインストールされている必要があります。
文書番号: 241835
タイトル: [IIS]IIS 5.0 における認証方法の選び方
https://support.microsoft.com/kb/241835/ja-jp
再現手順
IIS のマシン上で、コマンドプロンプトを [管理者として実行] から起動します。
以下のコマンドを実行し、、マシンアカウントのパスワードを変更します。
> nltest.exe /sc_change_pwd:ドメイン(FQDN)名
例: 該当のマシンが、WebServer01.contoso.local の場合は、nltest.exe /sc_change_pwd:contoso.local になります。
続いて、以下のコマンドを実行し、IIS を再起動します。
> iisreset
クライアントから IIS 上のファイルにアクセスします。認証ダイアログが表示されれば、技術文書 2545850 の問題が発生しています。
確認手順
以下の手順で、マシンアカウントのパスワードが更新された日時を確認することができます。
*IIS のマシンを WebServer01.contoso.local と仮定します。
ドメインコントローラー上で、コマンドプロンプトを [管理者として実行] から起動します。
以下のコマンドを実行し、IIS のマシンの DN (識別名) を取得します。
> dsquery computer -name WebServer01
"CN=WebServer01,CN=Computers,DC=contoso,DC=local"
手順 2 で取得した DN を利用して、最後にパスワードを変更した日時を取得します。
> dsquery * "CN=WebServer01,CN=Computers,DC=contoso,DC=local" -attr pwdlastset
pwdlastset
129823886587114188手順 3 で取得した日時を変換します。以下の例では 2012/05/25 12:04:18 にパスワードが更新されています。
> w32tm /ntte 129823886587114188
150259 03:04:18.7114188 - 2012/05/25 12:04:18
それでは、またの機会に。