設定步驟 4:設定應用程式安全性
作者:Keith Newman 和 Robert McMurray
在建立 ASP.NET 網站的這個階段中,您要在 IIS 中設定可用的安全性設定。 下列各節將討論 ASP.NET 應用程式的一般安全性設定:
4.1. 隔離 Web 應用程式
實作下列建議以隔離網站和伺服器上的 Web 應用程式。
- 使用每個網站或 Web 應用程式的一個應用程式集區。
- 將站台資料夾和檔案限制為應用程式集區身分識別。
- 每個站台設定個別的 ASP.NET 暫存資料夾,並且只授與存取權給應用程式集區身分識別。
- 請務必將站台根目錄上的 ACL (存取控制清單) 設定為僅允許存取應用程式集區身分識別。
如果您的每個應用程式集區有多個應用程式,請考慮建立足夠的應用程式集區並將部分應用程式移動到新的集區。
建立應用程式集區
- 開啟 IIS 管理員。
- 在 [連線] 窗格中,按一下 [應用程式集區]。
- 在 [動作] 窗格中,按一下 [新增應用程式集區]。
- 在 [名稱] 方塊中,輸入應用程式集區的唯一名稱。
- 選取 [.NET Framework 版本] 和 [Managed 管線模式]。
- 按一下 [確定]。
將應用程式移動到另一個應用程式集區
- 開啟 IIS 管理員。
- 在 [連線] 頁面中,選取您想要移動的網站或 web 應用程式。
- 在 [動作] 窗格中,按一下 [基本設定]。
- 在 [編輯站台] 對話方塊中,按一下 [選取] 以開啟 [選取應用程式集區] 對話方塊,然後從 [應用程式集區] 功能表選取應用程式集區。
- 按一下 [確定] 關閉 [選取應用程式集區] 對話方塊,然後按一下 [確定] 關閉 [編輯站台] 功能表。
將應用程式集區身分識別新增至資料夾或檔案 ACL
- 開啟 [Windows 檔案總管] 並瀏覽到資料夾或檔案。
- 以滑鼠右鍵按一下資料夾或檔案,然後按一下 [內容]。
- 選取 [安全性] 索引標籤,然後按一下 [編輯]。
- 按一下 [新增]、按一下 [位置],然後選取您的伺服器做為要搜尋的位置。
- 在 [輸入要選取的物件名稱] 方塊中,輸入 IIS APPPOOL\applicationPoolName,其中 applicationPoolName 是應用程式集區身分識別。
- 依序按一下 [確定]、[確定],再按一下 [確定] 以關閉對話方塊。
4.2. .NET 信任層級
本節說明如何使用 IIS 管理員 UI 或命令列來設定應用程式信任層級。
使用 UI 設定信任層級
- 開啟 IIS 管理員並流覽至您想要管理的層級。
- 在 [功能檢視] 中,連按兩下 [.NET 信任層級]。
- 在 [.NET 信任層級] 頁面上,從 [信任層級] 下拉式清單選取信任層級,然後在 [動作] 窗格中按一下 [套用]。
使用命令列設定信任層級
若要設定信任層級,請使用下列語法:
appcmd set config /commit:WEBROOT /section:trust /level:Full|High|Medium|Low|Minimal
層級屬性使用對應到預先設定的 CA 原則檔案的五個值的其中一個。 例如,若要設定 的信任層級 Full
,請在命令提示字元中輸入下列命令,然後按 ENTER:
appcmd set config /commit:WEBROOT /section:trust /level:Full
注意
當您使用 Appcmd.exe 在 IIS 8 的全域層級設定信任元素時,請在 命令中指定 /commit:WEBROOT
,以便對根Web.config檔案進行組態變更,而不是ApplicationHost.config。
4.3. .NET 驗證
在 [在 IIS 上規劃 ASP.NET 網站] 中,您針對應用程式適用何種驗證模式做出設計決策。
ASP.NET 表單驗證
本節說明如何使用 IIS 管理員 UI 或命令列來設定 ASP.NET 表單驗證。
使用 UI 設定表單驗證
- 開啟 IIS 管理員並流覽至您想要管理的層級。
- 在 [功能檢視] 中,連按兩下 [驗證]。
- 在 [驗證] 頁面上,選取 [表單驗證]。
- 在 [動作] 窗格中,按一下 [啟用] 以使用預設設定的表單驗證。
- 在 [動作] 窗格中,按一下 [編輯]。
- 在 [編輯表單驗證設定] 對話方塊的 [登入 URL] 文字方塊中,輸入用戶端登入的頁面名稱。
- 在 [ 驗證 Cookie 逾時 (分鐘) ] 文字方塊中,輸入您想要用於逾時值的分鐘數。
- 從 [模式] 清單中,選取您想要使用的 Cookie 模式。
- 在 [名稱] 文字方塊中,輸入 Cookie 的名稱。
- 從 [保護模式] 清單中,選取您想要使用的保護模式。
- 選取 [需要 SSL] 核取方塊。
- 選取 [延長每個要求的 Cookie 到期日] 核取方塊,然後按一下 [確定]。
使用命令列設定表單驗證
若要啟用表單驗證,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:None|Windows|Passport|Forms
根據預設,IIS 8 會將 mode
屬性設定為 Windows
,這會停用表單驗證。 如果您將 屬性設定為 Forms
,則會啟用表單驗證。 例如,若要啟用表單驗證,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /mode:Forms
注意
當您使用 Appcmd.exe 在 IIS 8 的全域層級設定驗證專案時,請在 命令中指定 /commit:WEBROOT
,以便對根Web.config檔案進行組態變更,而不是ApplicationHost.config。
若要指定表單驗證的登入 URL,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:string
變數 forms.loginURL:string
是用戶端登入的頁面名稱。 預設值為 Login.aspx。 例如,若要指定表單驗證的登入 URL,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.loginURL:login.aspx
注意
當您使用 Appcmd.exe 在 IIS 8 的全域層級設定驗證專案時,請在 命令中指定 /commit:WEBROOT
,以便對根Web.config檔案進行組態變更,而不是ApplicationHost.config。
若要指定表單驗證的驗證逾時,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:TimeSpan
變數 forms.timeout:TimeSpan
是用於驗證的 Cookie 到期時間,以分鐘為單位。 預設值為 30 分鐘。 例如,若要指定表單驗證的驗證逾時,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.timeout:30
注意
當您使用 Appcmd.exe 在 IIS 8 的全域層級設定驗證元素時,您必須在 命令中指定 /commit:WEBROOT
,以便對根Web.config檔案進行組態變更,而不是ApplicationHost.config。
若要設定表單驗證的 Cookie 名稱,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:string
變數 forms.name:string
是用於表單驗證的 Cookie 名稱。 預設值為 .ASPXAUTH。 例如,若要設定表單驗證的 Cookie 名稱,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.name:.ASPXUTH
若要設定表單驗證的 Cookie 模式,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseUri|UseCookies|AutoDetect|UseDeviceProfile
forms.cookieless
的預設值為 UseDeviceProfile
。 例如,若要設定表單驗證的 Cookie 模式以使用 [使用裝置設定檔] 設定,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.cookieless:UseDeviceProfile
若要設定表單驗證的 Cookie 保護模式,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All|None|Encryption|Validation
forms.protection
的預設值為 All
。 例如,若要設定表單驗證的 Cookie 保護模式以使用 [加密及驗證] 設定,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.protection:All
驗證 Cookie 若需要 SSL,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true|false
forms.requireSSL
的預設值為 false
。 如果您將此屬性設定為 true
,則需要 SSL。 例如,驗證 Cookie 若需要 SSL,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.requireSSL:true
若要快取經常要求的內容,請使用下列語法:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true|false
forms.slidingExpiration
的預設值為 true
。 例如,若要快取經常要求的內容,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:system.web/authentication /forms.slidingExpiration:true
ASP.NET 模擬驗證
使用 UI 設定模擬驗證
- 開啟 IIS 管理員,然後流覽至您想要管理的層級。
- 在 [功能檢視] 中,連按兩下 [驗證]。
- 在 [驗證] 頁面上,選取 [ASP.NET 模擬]。
- 在 [動作] 窗格中,按一下 [啟用] 以使用預設設定的 ASP.NET 模擬驗證。
- (選擇性) 在 [動作] 窗格中,按一下 [編輯] 設定安全性原則。
- 在 [編輯 ASP.NET 模擬設定] 對話方塊中,選取 [特定使用者] 或 [已驗證的使用者]。 無論您選取何者,IIS 都會使用此身分識別做為 ASP.NET 應用程式的資訊安全內容。 根據預設,IIS 8 會設定為模擬已驗證的使用者。
- 按一下 [確定] 完成,或繼續下一個選擇性步驟變更要模擬的身分識別。
- (選擇性) 按一下 [設定] 變更 [特定使用者] 身分識別。
- 在 [設定認證] 對話方塊,針對 IIS 要用於匿名存取的新帳戶,在 [使用者名稱] 中輸入現有的使用者帳戶名稱,在 [密碼] 中輸入與該使用者帳戶關聯的密碼,然後在 [確認密碼] 中輸入完全相同的值。
- 按一下 [確定] 關閉 [設定認證] 對話方塊。
- 按一下 [確定] 關閉 [編輯 ASP.NET 模擬設定] 對話方塊。
使用命令列設定模擬驗證
若要啟用或停用 ASP.NET 模擬,請使用下列語法:
appcmd set config /commit:WEBROOT /section:identity /impersonate:true|false
根據預設,IIS 會將 impersonate
屬性設定為 false
,這會停用 ASP.NET 模擬驗證。 如果您將 屬性設定為 true
,則會啟用 ASP.NET 模擬驗證。 例如,若要啟用 ASP.NET 模擬驗證,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:identity /impersonate:true
或者,您可以使用下列語法設定供 IIS 模擬的帳戶:
appcmd set config /commit:WEBROOT /section:identity /userName:string /password:string
變數 userName:string
是 IIS 用來模擬的帳戶,而變數 password:string
是密碼。 例如,若要使用名為 Moe 的帳戶供 IIS 模擬,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config /commit:WEBROOT /section:identity /userName: Moe /password:pass@word1
注意
當您使用 Appcmd.exe 在 IIS 8 的全域層級設定識別元素時,請在 命令中指定 /commit:WEBROOT
,以便對根Web.config檔案進行設定變更,而不是ApplicationHost.config。
4.4. 電腦金鑰設定
本節說明如何使用 IIS 管理員 UI 為您的 ASP.NET 應用程式產生機器金鑰。
使用 UI 產生機器金鑰
- 開啟 IIS 管理員,然後流覽至您想要管理的層級。
- 在 [功能檢視] 中,連按兩下 [機器金鑰]。
- 在 [機器金鑰] 頁面上,從 [驗證方法] 清單選取驗證方法。 預設的驗證方法為 [SHA1]。
- 從 [加密方法] 清單選擇加密方法。 預設的加密方法為 [自動]。
- (選擇性) 設定驗證設定和解密金鑰。
- 在 [動作] 窗格中,按一下 [產生金鑰],然後按一下 [套用]。
4.5. TLS/SSL 通訊
本節說明如何為您的應用程式設定 TLS/SSL 安全性。
從憑證授權單位 (CA) 取得伺服器憑證之後,逐步完成下列各節中的程序:
SSL 繫結
本節說明如何使用 IIS 管理員 UI 或命令列,新增 SSL 繫結至您的站台。
使用 UI 將 SSL 系結新增至網站
- 開啟 IIS 管理員。
- 在 [連線] 窗格中,展開樹狀目錄中的 [站台] 節點,然後按一下以選取您要新增繫結的站台。
- 在 [動作] 窗格中,按一下 [繫結]。
- 在 [站台繫結] 對話方塊中,按一下 [新增]。
- 在 [新增站台繫結] 對話方塊中,在 [類型] 清單中選取 [https]。
- 從 [IP 位址] 清單中,選取 [全部未指派] (除非您想要使用特定 IP 位址)。
- 在 [連接埠] 方塊中,輸入連接埠號碼 (預設為 443)。
- 在 [主機名稱] 方塊中,輸入主機電腦的名稱。
- 如果您想要使用相同 IP 位址服務多個安全的網站,請選取 [需要伺服器名稱指示] 核取方塊。
- 從 [SSL 憑證] 清單中,選取您網站的憑證。 如果您的憑證未出現在清單中,請按一下 [ 選取 ],並使用 [ 選取憑證 ] 對話方塊搜尋憑證。
- 按一下 [確定]。
使用命令列將 SSL 系結新增至網站
若要新增繫結至站台,請使用下列語法:
appcmd set site /site.name:string /+bindings.[protocol='string', bindingInformation='string']
變數 site.name:string
是您要新增系結之月臺的名稱。 變數 protocol='string'
是您想要使用的通訊協定,而變數 bindingInformation='string'
是 IP 位址、埠和主機標頭的組合。
例如,若要設定名為 contoso 的站台,對於連接埠 443 沒有主機標頭的所有 IP 位址都有 HTTPS 繫結,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set site /site.name:contoso /+bindings.[protocol='https', bindingInformation='*:443:']
您的站台需要使用 SSL
本節說明如何使用 IIS 管理員 UI 或命令列,讓您的網站需要 SSL。
使用 UI 設定需要 SSL
開啟 IIS 管理員,然後流覽至您想要管理的層級。 請確定您是在站台、應用程式或目錄層級。在伺服器層級無法使用 [SSL 設定]。
注意
如果您想要在檔案層級設定 SSL,請在 [內容檢視] 中瀏覽至檔案,然後在 [動作] 窗格中按一下 [切換到功能檢視]。
在 [功能檢視] 中,連按兩下 [SSL 設定]。
在 [SSL 設定] 頁面上,選取 [需要 SSL]。
在 [動作] 窗格中,按一下 [套用]。
使用命令列設定需要 SSL
如果需要 SSL,請使用下列語法:
appcmd set config "site|URL" /section:access /sslFlags:Ssl /commit:APPHOST
變數 site|URL
是您想要 IIS 8 要求 SSL 的月臺、應用程式、虛擬目錄或檔案。 例如,預設網站若需要 SSL,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config "Default Web Site" /section:access /sslFlags:Ssl /commit:APPHOST
例如,預設網站上的 iisstart.htm 若需要 SSL,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:Ssl /commit:APPHOST
用戶端憑證
使用 UI 指定用戶端憑證
開啟 IIS 管理員,然後流覽至您想要管理的層級。 請確定您是在站台、應用程式或目錄層級。在伺服器層級無法使用 [SSL 設定]。
注意
如果您想要在檔案層級設定 SSL,請在 [內容檢視] 中瀏覽至檔案,然後在 [動作] 窗格中按一下 [切換到功能檢視]。
在 [功能檢視] 中,連按兩下 [SSL 設定]。
在 [SSL 設定] 頁面上,選擇性選取 [需要 SSL]。 您不需要 SSL 就可以 [略過] 或 [接受] 用戶端憑證。
在 [SSL 設定] 頁面的 [用戶端憑證] 區域中,請使用下列其中一個程序:
- 如果您不想接受用戶端憑證 (即使用戶端出示),請選取 [略過]。
- 選取 [接受 ] 以接受用戶端憑證。
- 選取 [需要] 為需要用戶端憑證。 若要使用 [需要用戶端憑證],您必須啟用 [需要 SSL]。
在 [動作] 窗格中,按一下 [套用]。
使用命令列指定用戶端憑證
若要指定是否使用用戶端憑證,請使用下列語法:
appcmd set config "site|URL" /section:access /sslFlags:Ssl|SslNegotiateCert|SslRequireCert /commit:APPHOST
變數 site|URL
是您要 IIS 啟用用戶端憑證的月臺、應用程式、虛擬目錄或檔案。 例如,預設網站若要接受用戶端憑證,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config "Default Web Site" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST
例如,若要接受預設網站上 iisstart.htm 檔案的用戶端憑證,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config "http://localhost/iisstart.htm" /section:access /sslFlags:SslNegotiateCert /commit:APPHOST
您可以指定一或多個 sslFlags 屬性的值。 如果您想要多個值,請以逗號 (,) 分隔每個值。 例如,若預設網站上同時需要指定 SSL 和用戶端憑證需求,請在命令提示字元中,輸入下列命令,然後按 ENTER 鍵:
appcmd set config "Default Web Site" /section:access /sslFlags:Ssl,SslRequireCert /commit:APPHOST