無法開始監視 'xx' 的變更,因為已經到達網路 BIOS 命令限制

在去年底的時候曾經在客戶的網站主機收到一個 載入組態檔時發生錯誤: 無法開始監視 '\\10.0.1.1\Shared\8666-f79049226252' 的變更,因為已經到達網路 BIOS 命令限制 的錯誤,當時並不知道是什麼問題,只知道重新啟動 IIS 或回收應用程式集區就會恢復正常,但最近已經瞭解了問題發生的主因。

當時的環境是兩台 Windows Server 2003 (x86) / IIS6 網站伺服器,兩台主機做負載平衡(Load Balance),而網站有部分目錄是共用的,所以透過 UNC 路徑的方式將檔案放置在另一台 Windows Server 2003 (x86) 主機上,在平時都運作正常,但偶而會發生以下錯誤訊息:

載入組態檔時發生錯誤: 無法開始監視 '\\10.0.1.1\Shared\8666-f79049226252' 的變更,因為已經到達網路 BIOS 命令限制。如需此錯誤的詳細資訊,請參閱 Microsoft 知識庫文件 810886。不支援在 Windows XP 平台的 UNC 共用上裝載。 (\\10.0.1.1\Shared\8666-f79049226252\web.config)

以下是當時從事件檢視器收到的錯誤訊息:

事件代碼: 3008 
事件訊息: 發生組態錯誤。 
事件時間: 12/22/2009 1:14:55 PM 
事件時間 (UTC): 12/22/2009 5:14:55 AM 
事件 ID: 96eedefb410b4161b05e2bdce7e9976e 
事件序列: 955 
事件項目: 1 
事件詳細資料代碼: 0 

應用程式資訊: 
應用程式定義域: /LM/W3SVC/1603528564/Root-1-129059311890503750 
信任層級: Full 
應用程式虛擬路徑: / 
應用程式路徑: C:\inetpub\wwwroot\ 
電腦名稱: WF-Web1

處理序資訊: 
處理序 ID: 2348 
處理序名稱: w3wp.exe 
帳戶名稱: NT AUTHORITY\NETWORK SERVICE 

例外狀況資訊: 
例外狀況型別: ConfigurationErrorsException 
例外狀況訊息: 載入組態檔時發生錯誤: 無法開始監視 '\\10.0.1.1\Shared\8666-f79049226252' 的變更,因為已經到達網路 BIOS 命令限制。如需此錯誤的詳細資訊,請參閱 Microsoft 知識庫文件 810886。不支援在 Windows XP 平台的 UNC 共用上裝載。 (\\10.39.1.44\Shared\8666-f79049226252\web.config) 

要求資訊: 
要求 URL: http://www.example.com/images/8666-f79049226252/IMG_0205.jpg 
要求路徑: /images/8666-f79049226252/IMG_0205.jpg 
使用者主機位址: 192.168.79.13 
使用者: 
已驗證: False 
驗證類型: 
執行緒帳戶名稱: NT AUTHORITY\NETWORK SERVICE 

執行緒資訊: 
執行緒 ID: 1 
執行緒帳戶名稱: NT AUTHORITY\NETWORK SERVICE 
正在模擬: False 
堆疊追蹤: at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSection(String configKey, Boolean getLkg, Boolean checkPermission)
at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
at System.Web.Configuration.RuntimeConfig.GetSectionObject(String sectionName)
at System.Web.Configuration.RuntimeConfig.GetSection(String sectionName, Type type, ResultsIndex index)
at System.Web.Configuration.RuntimeConfig.get_Identity()
at System.Web.HttpContext.get_ImpersonationToken()
at System.Web.ClientImpersonationContext.Start(HttpContext context, Boolean throwOnError)
at System.Web.HttpApplication.ThreadContext.SetImpersonationContext()
at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error)


自訂事件詳細資料: 

請在 http://go.microsoft.com/fwlink/events.asp 查看說明及支援中心,以取得其他資訊。

發生的主因在於 Web 伺服器透過 UNC 連接檔案伺服器(File Server) 時若連線數過大時,可能會導致 RPC 運作失敗因而無法透過 UNC 存取檔案,所以才會出現這樣的錯誤,那是因為在 x86 架構下的不分頁記憶體(non-paged pool memory)有限,在一台 x86 架構下的機器的上限為 256MB,所以 Windows 才會讓 UNC 連接時的同時連線數降低,才不會避免記憶體不足而導致系統不穩定的情況。

即便到了 Windows Server 2008 作業系統,如果你安裝 x86 架構的版本,依然會有可能發生這個錯誤,必須進一步處理。不過此問題在 x64 架構下不會發生,因為 x64 架構下的不分頁記憶體上限有 128GB 之多,所以很難發生類似的錯誤。註: 目前最新版的 Windows Server 2008 R2 僅提供 x64 版本。

解決方法就是調整 Client 端 ( IIS 網站伺服器 ) 與 Server 端 ( 檔案伺服器 ) 的系統機碼,兩端如果都是 x86 架構的作業系統,則兩邊的主機都需要進行設定。

修改 Client 端電腦的機碼 ( 也就是使用檔案伺服器的電腦,也就是執行 IIS 主機 )

建立 Client.reg 機碼檔,並輸入以下內容,並進行合併機碼的動作:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanworkstation\parameters] "MaxCmds"=dword:00000800

修改 Server 端電腦的機碼 ( 也就提供 UNC 檔案服務的檔案伺服器 )

建立 Server.reg 機碼檔,並輸入以下內容,並進行合併機碼的動作:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"MaxMpxCT"=dword:00000800
"MaxWorkItems"=dword:00002000

---

若你想比較 x86 與 x64 下的記憶體架構,可以參考這篇 KB 文章

相關連結

  

此文章由 will 發表於 2010/3/15 下午 08:45:44

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: IIS | 系統管理

標籤: , , ,

收藏:

如何停用 IIS5 / IIS6 / IIS7 的 SSL v2 加密協定 (含原理說明)

在多年以前 SSL 第二版 (v2) 就已經被證實有編碼加密方面的瑕疵,因此駭客很輕易的就能對 SSL v2 加密過的封包進行反解,或可能會透過中間人攻擊(Man-in-the-middle attack)手法加害於你的網站用戶,因此大多數的資安掃瞄軟體皆會建議在伺服器上關閉 SSL v2 的協定,以確保用戶端透過 SSL ( HTTPS ) 連上網站伺服器時是安全的連線。

我原本以為從伺服器上關閉 SSL v2 可能會導致部分舊版的瀏覽器無法登入網站,但理解 SSL 協定的握手過程 (Handshake) 後,就知道不會導致客戶無法連線的問題,甚至想不到不停用 SSL v2 的理由。

SSL/TLS 大致的運作過程如下:

  • 瀏覽器對特定網站發出 https 連線請求,雙方根據 SSL 所規範的 handshake 機制
  • 瀏覽器會先送出一個 "ClientHello" 訊息給網站伺服器,裡面包含了瀏覽器所支援的 Protocol 資訊
    • 例如: TLS v1.2 , v1.1, v1.0, SSL v2, SSL v3 等等。
    • 備註: Internet Explorer 瀏覽器從 IE7 開始就預設關閉了 SSL v2 協定,其他像 Firefox, Google Chrome 等叫的出來的瀏覽器也都預設關閉 SSL v2 協定。
  • 當網站伺服器收到此 "ClientHello" 訊息後,會回應 "ServerHello" 訊息給瀏覽器,其內容會從瀏覽器發出的 "ClientHello" 中所有 Protocol 中最安全的版本且伺服器也支援的 Protocol 予以回應。
    • 由於是從最高安全等級做出比對,一般狀況下通常都會利用 TLS v1.0 或是 SSL v3 來取得雙方的認可,進而約定於之後的連線過程所使用的 Protocol 版本。

由上述運作過程可知,若網站伺服器關閉 SSL v2 協定,並不代表瀏覽器就會無法使用 SSL 協定,因為通常還有其他版本可供挑選。

若以舊版的瀏覽器 IE6 來說,IE6 本身就同時支援 SSL v2 與 SSL v3 協定,在與網站伺服器 handshake 時通常會自動選擇 SSL v3 協定進行後續的連線,但如果用戶端被惡意植入木馬或被駭客修改了機碼設定,導致用戶端被強迫使用 SSL v2 進行安全連線,便會導致使用者遭受中間人攻擊機密資訊被擷取等風險,所以無論如何 SSL v2 這種不安全的加密協定還是建議從伺服器端停用比較好,寧願讓使用者連不上網,也不願意看到使用者因為你的網站而受害!

如果你的網站使用者或客戶因為你將網站伺服器的 SSL v2 給關閉而導致連不上網站的情況,那你也可以強烈的懷疑客戶的主機是否已經被駭客入侵或被植入木馬了。再換句話說,如果你不管用戶端安不安全的話,那又何必花錢採購 SSL 憑證保護使用者的網路安全呢?

 

關閉 SSL v2 的方式

若要取消網站伺服器 (IIS5 ~ IIS7) 對 SSL v2 的支援,必須修改系統機碼才行,步驟如下:
(註:此方法適用 x86 與 x64 架構,也適用於 Windows Server 2003 ~ Windows Server 2008 R2)

1. 建立一個 Disable_IIS7_SSLv2.reg 登錄檔,檔案內容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
"Enabled"=dword:00000000

2. 透過滑鼠右鍵進行合併機碼的動作

   

3. 合併完成後需將伺服器重新開機,重新開機後自然就會生效。

 

驗證 SSL v2 已關閉的方法

若要驗證伺服器是否設定正確,最簡單的方法就是利用網站伺服器 SSL 支援版本檢測工具,只要輸入你的網站網址,再按下 [SSL-check] 按鈕即可進行檢測,如下圖示:

 

如果你的檢測結果是如下圖這樣,在 Available SSL2 ciphers 沒有任何資料,那就代表你已經完成關閉 SSL v2 的設定。

 

如果你的 IIS 網站沒有做出任何修改,預設還是會支援 SSL v2 的協定,檢測出來的結果如下圖示:

最後,所以還是建議各位網站管理員將網站伺服器上預設支援的 SSL v2 協定關閉,確保用戶的安全性。

相關連結

  

此文章由 will 發表於 2010/3/10 上午 10:56:11

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: IIS | Security

標籤: , , , ,

收藏:

購買與安裝 SSL 憑證完全攻略(以 IIS7 為例)

最近又要再次購買 SSL 憑證替客戶安裝在 IIS7 上 (其實是 IIS 7.5 但介面一樣),也乘著這次將過程做個完整記錄,從建立憑證要求購買憑證識別憑證檔類型完成憑證要求匯入中繼憑證設定站台繫結等,讓你按圖施工、保證成功。

第 1 步:建立憑證要求

要申請安裝 SSL 憑證,必須先建立一個「憑證要求檔」並寄給憑證核發單位(販售憑證的公司),然後由信任的憑證配發單位進行憑證的建立,憑證核發後你會拿到 2 ~ 3 個不同用途的憑證檔。

進入 IIS7 管理介面,在伺服器層級的 IIS 區域找到一個「伺服器憑證」的功能點擊進去

點擊右側選單的「建立憑證要求」按鈕

接著輸入一些關於你 SSL 憑證的註冊資訊,一般名稱輸入你的 SSL 網址,組織輸入你的公司名稱(英文)

這個步驟保留預設值即可,一般來說位元長度選擇 1024 就很夠了。

接著輸入你要產生的「憑證要求檔」檔名與路徑,按下完成後就會產生 C:\certreq.txt 檔案。

第 2 步:購買憑證

這時你就要選擇一家信用可靠的憑證公司,然後向他們購買 SSL 憑證,購買時你必須將上一步驟產生的憑證要求檔 ( C:\certreq.txt ) 寄給對方,對方就可以依據這個 憑證要求檔 產生合法有效的憑證給你。

第 3 步:識別憑證檔類型

當憑證公司簽發憑證幾給你之後,通常至少會有「自我憑證」與「中繼憑證」,有時後還會給你他們 CA 根憑證,不過通常知名的 CA 根憑證都會預設內建在你的作業系統中,所以通常不用特別安裝。

如下圖例,通常 CA 單位在核發憑證時都會替不同的憑證檔案命名,慣例如下:

  • 通常在檔名中有 Root 字眼的憑證就是「CA 根憑證」
  • 通常在檔名中有 SSL 字眼的憑證就是「中繼憑證」
  • 通常在檔名中有 Server 字眼的憑證就是「自我憑證」

image

不過,這只是慣例,有時後命名不見得是這樣,如果你還是不清楚應該如何判斷哪個檔案屬於那種憑證,你可以詢問您購買的 SSL 憑證廠商的業務洽詢,或可參考以下說明。

如何判斷是否為「CA 根憑證」

將憑證檔用滑鼠雙擊開啟,並切換到 [憑證路徑頁籤],如果只有一筆資料那就是「根」憑證了。

如何判斷是否為「中繼憑證」

將憑證檔用滑鼠雙擊開啟,並切換到 [憑證路徑頁籤],如果你有看到 2 筆資料,且該資料在「根憑證」之下的話,那這張就是「中繼憑證」了。

如何判斷是否為「自我憑證」

將憑證檔用滑鼠雙擊開啟,並切換到 [憑證路徑頁籤],如果你有看到 3 筆資料,且該資料在「根憑證」之下有張「中繼憑證」,在「中繼憑證」還有一張用你申請的網址所命名的憑證,那這張就是未來要安裝到 IIS7 中的「自我憑證」檔!

第 4 步:完成憑證要求 ( 安裝自我憑證 )

此步驟非常重要,在執行「完成憑證要求」時的電腦,必須與你在「建立憑證要求」時的電腦一模一樣,如果是不同台電腦就無法產生私密金鑰(*.pfx),以致於無法安裝憑證的情況,通常是安裝完成後會看到憑證,但是按下 F5 重新整理時該憑證就會立即消失。

進入 IIS7 管理介面,在伺服器層級的 IIS 區域找到一個「伺服器憑證」的功能點擊進去

點擊右側選單的「完成憑證要求」按鈕

接著在第一個欄位選取「自我憑證檔」,並設定一組「好記的名稱」,這裡通常會設定你申請 SSL 憑證的網域名稱。

接著你就會看到安裝完成的憑證在中間視窗中出現,這時你按下 F5 鍵重新整理如果項目還在的話那就代表你安裝憑證成功了。

第 5 步:匯入中繼憑證

這個步驟就比較複雜了,要跳開 IIS 管理介面,先使用 [開始] / [執行] 並輸入 mmc 開啟主控台,並選取 [檔案] / [新增/移除嵌入式管理單元] 功能

選取 [憑證] 管理單元點選 [新增] 按鈕,然後選取 [電腦帳戶] 選項,按下 [下一步] 按鈕,再按 [完成] 按鈕,再按下 [確定] 按鈕加入主控台。

接著開啟 [憑證] / [中技憑證授權單位] / [憑證] 點選滑鼠右鍵,選取 [所有工作] / [匯入]

然後在憑證匯入精靈選取「中繼憑證檔」

接著用預設設定即可,直接按 [下一步] 按鈕,再按下 [完成] 按鈕後即安裝成功。

第 6 步:設定站台繫結

最後一個步驟就是要將剛剛完成的憑證繫結(Binding)到站台去,你可以先選取要設定 SSL 的站台,按下滑鼠右鍵並選取 [繫結]

然後點擊 [新增] 按鈕,在類型欄位選取 https,然後再到 SSL 憑證欄位選取你剛剛新增的 [自我憑證],這裡顯示的名稱是你剛剛匯入自我憑證時「好記的名稱」欄位所設定的值。最後按下 [確定] 按鈕即可將 SSL 憑證設定完成。

以上就是我這次安裝 SSL 憑證並繫結至 IIS 站台的完全攻略,相信傻瓜也能安裝成功! ^_^

  

此文章由 will 發表於 2010/3/2 下午 08:56:50

永久連結 | 評論 (8) | 此文章的RSSRSS comment feed |

分類: IIS | 系統管理

標籤: , , , ,

收藏:

將 ASP.NET 網站部署在 UNC 路徑上最重要的步驟

如果要將 ASP.NET 網站安裝在遠端的 UNC 路徑上,在設定 IIS 時除了一般檔案的存取權限外,最重要的就是 ASP.NET 的執行權限是否有正確設定,由於所有置於 UNC 路徑上的 .NET 應用程式都會預設套用 LocalIntranet 群組,所以你無法將 ASP.NET 佈署在 UNC 路徑上,除非自行新增 .NET 安全性原則。

在沒設定 .NET 安全性群組之前,不管你怎麼設定都會出現以下安全性例外狀況的錯誤訊息:

安全性例外狀況 :: 例外詳細資訊: System.Security.SecurityException: 型別 'System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 的使用權限要求失敗。

SecurityException: Request for the permission of type ‘System.Web.AspNetHostingPermission, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089′ failed

 

解決此問題的步驟如下:

1. [開始] / [執行] / 輸入 cmd 並按下 Enter

2. 進入 .Net Framework 的安裝目錄(注意:x86 架構與 x64 架構的目錄並不相同)

    如果是 x64 架構請進入 C:\Windows\Microsoft.NET\Framework64\v2.0.50727

    如果是 x86 架構請進入 C:\Windows\Microsoft.NET\Framework\v2.0.50727

    注意: 如果進入錯誤的路徑,怎麼設定還是無法使用,這取決於你的 .NET 應用程式是跑什麼架構!

3. 執行 CASPOL.exe 工具授權特定 UNC 路徑為「完全信任」,請參考以下指令

caspol -m -ag 1. -url "file://\\server\share\*" FullTrust -exclusive on

  接著畫面會問你是否確認要執行這個動作,它會要你輸入 yes 或 no,但你只能輸入 yn 喔!( 按 y )

  

  我們可以透過 caspol -listgroups 指令驗證此安全性原則是否設定成功:

 

4. 最後去設定 IIS ( IIS6 或 IIS 7 ),如果先前已經設定好請務必記得「回收應用程式集區」才能讓生效!

 

其他補充說明:

1. 如果你不小心新增了兩個重複的 UNC 路徑到 .NET 安全性原則中會造成 ASP.NET 無法執行

   錯誤訊息是: 不允許一個以上的獨佔群組。More than one exclusive group is not allowed.

   System.Security.Policy.PolicyException: 不允許一個以上的獨佔群組。

2. 如果 CASPOL.exe 本身在執行的時候會引發例外(Exception),那可能要重新開機才能解決此問題!

3. 若要移除先前設定的安全性原則,可以參考以下指令:

caspol -rg 1.6

注意:所有 .NET 安全性原則都有個編號,記得先用 caspol -listgroups 列出所有群組,並找出你之前新增的安全性原則編號,然後才能帶入指令中。

 

相關連結

  

此文章由 will 發表於 2010/2/28 下午 12:13:20

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: IIS | ASP.NET | 系統管理

標籤: , , , , , ,

收藏:

如何檢視 IIS7 各工作者處理序正在執行的要求列表

在以前 IIS6 的時候為了要看有哪些人在看哪些網頁必須要透過 IIS Diagnostic Tools 的 Request Viewer 工具來查看(詳見 如何查看目前 IIS6 有多少人在看哪些網頁 文章),到了 IIS7 這些功能都已經內建,讓你非常容易就能查出目前網站到底有哪些網頁正在執行或使用者正在下載哪些檔案。

若要查詢工作者處理序((Worker Process)正在執行哪些頁面(Executing Requests),有兩種方法:

1. 透過 appcmd 指令

appcmd list requests
appcmd list requests /apppool.name:DefaultAppPool
appcmd list requests /?

2. 透過 IIS 管理員 GUI 介面

記得要點選伺服器節點,然後選取 IIS 區域的 工作者處理序 (Worker Process)

 

選取特定的應用程式集區,按滑鼠右鍵,並點選 [檢視目前要求]

這裡的 [檢視目前要求] 是以「應用程式集區」為單位,如果你有 3 個站台共用同一個「應用程式集區」的話,所有正在服務的要求就會列一起。( 點圖可放大 )

相關連結

  

此文章由 will 發表於 2010/2/13 上午 03:15:28

永久連結 | 評論 (0) | 此文章的RSSRSS comment feed |

分類: IIS | Tips | 系統管理

標籤: , , ,

收藏: