2011年8月4日

IIS使用Windows驗證時,無法登入,且會出現401.1 錯誤。

剛剛在整理舊的備忘資訊時剛好看到這個事項,這是之前花了好幾天的時間解決的一個問題,不過也因為時間已經太久,現在也沒機器設備可以將當時狀況還原,所以只能用文字的方式描述。

這個問題的來源,是因為當時要建設本機的開發環境,而每個人的開發環境下,都有自己的一個網址,例如說,我本機的開發網址是sky.sanc.idv.tw,而其他人的可能是xxx.sanc.idv.tw,當然,姑且先不討論這種方式好或不好,畢竟有的時候,在公司下的某些限制,不是一般人能想像的( 說到這就想哭了… ),當然,這種設定,其實也不難,只要在DNS下,設定一下就好了,可憐就可憐在於IT部門用了一堆理由藉口,不準這樣做,好吧,既然不准設DNS,那我設定自己電腦上的host總可以了吧,於是,故事就這樣展開了…

因為我的主機,也必須要當其他人的Web Server ( 當初原本是每個人設定每個人本機上的iis,但有一台因特殊原因,必須利用我這台當跳板 ),所以,我這台的電腦上,除了sky.sanc.idv.tw外,還要設定aaa.sanc.idv.tw。

所以我把當時我所做的事情,稍微還原一下。

1.我先於windows下,將想要解析的Domain name加入於hosts檔案中。
a.使用記事本打開/WINDOWS/system32/drivers/etc/hosts檔案( 因有權限問題,所以別忘了先調整權限 )。
b.在最下面加入要解析的網址如下。( 改完存檔,也別忘了把權限調整回來。 )

image

到此,就可以於本機上解析到sky.sanc.idv.tw還有xxx.sanc.idv.tw。
然後我們去ping一下,看看正不正確。

image

看來是沒有任何問題了,這時候我們要開始設定IIS

1.打開IIS,然後新增網站,設定基本上如下,xxx的網站又是同步驟來執行。

image

2.因為我們是使用AD驗證,所以要開啟windows驗證功能,並且將匿名驗證的功能關掉,如果沒看到Windows驗證,就可能要去給他裝一下。
image

到這邊為止,IIS也設定完成了,這時候,就可以很開心的在本機上模擬兩個網址…原本應該是如此,但果然事不從人願…,怎樣登入,都登入不進去,都會一直卡在登入畫面。

image

這時候按下取消出現的是

HTTP 錯誤 401.1 - Unauthorized

使用您提供的認證,沒有權限檢視此目錄或網頁。

嗯,我想也是,畢竟沒有登入成功,所以一定會出現沒有權限之問題,原本猜想是資料夾問題,但是將windows驗證關閉,開啟匿名登入,又可以順利進去,所以把矛頭指向Domain name解析的問題,猜想說,難道IIS不支援嗎?,不可能吧,Apache都可以輕易達成了,IIS怎麼可能不支援這基本的東西,就這樣,搞了我一兩天。

後來在Microsoft的網站上找到一篇,疑是很像這問題的文章。
http://support.microsoft.com/kb/896861
雖然裡面的症狀,幾乎都不是我所碰到的,但是這段話,卻讓我開始懷疑。

當網站上使用 「 整合式驗證 」 且具有對應至本機回送位址的名稱時,就會發生這個問題。

於是詳細了查詢這個問題,原來是因為安全性的問題,讓IIS會禁止回應,具體的安全性文題如下:

之所以發生這個問題,是因為 NT LAN Manager (NTLM) 將不同的命名慣例視為遠端個體,而非本機個體。當用戶端先計算與快取在本機 "lsass" 記憶體中由伺服器傳送對 NTLM 挑戰的正確回應,再將回應傳回伺服器時,會無法驗證本機。當 NTLM 的伺服器碼發現在本機 "lsass" 快取中有已接收的回應時,伺服器碼不遵循驗證請求,並將該請求視為重新顯示攻擊。這個行為導致本機驗證失敗。

所以產生了此問題

在套用此安全性更新之後,如 Microsoft SQL Server 或 Internet Information Services (IIS) 等應用程式在進行本機 NTLM 驗證請求時可能失敗。

那要如何解決此問題呢,官方有兩種解決方法,第一種是停用NTLM 反映保護,但不推薦,所以我們採用第二種方式,停用特定位置的保護,步驟如下。

1.打開Regedit,並找到這個位置HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
2.在MSV1_0上,按下滑鼠右鍵,選新增,多字串值。
image

3.將此值命名為BackConnectionHostNames

image

4.點選剛剛建立好的值,並按下滑鼠右鍵,選修改,然後於視窗內填入要略過的網址如下。

image

5.按下確定後,Regedit就可以關閉了,這時候需要將IIS的網站重啟。

image

然後,就可以順利的登入了!!

這次的事情,老實說,碰到了兩次,第二次的時候,因已經過了一段時間,又給他熊熊的忘記了,所以,又處理了一兩天,所以,把資訊記錄下來,是非常重要的 >"< 。

以下是參考文章:
http://support.microsoft.com/kb/957097
http://support.microsoft.com/kb/896861

1 則留言:

  1. 感謝這篇文章(不知道您還有沒有再看這邊)
    時隔5年還是很有用

    回覆刪除