分享方式:


設定步驟 4:設定應用程式安全性

作者:Keith Newman 和 Robert McMurray

在建立 ASP.NET 網站的這個階段中,您要在 IIS 中設定可用的安全性設定。 下列各節將討論 ASP.NET 應用程式的一般安全性設定:

4.1. 隔離 Web 應用程式

實作下列建議以隔離網站和伺服器上的 Web 應用程式。

  • 使用每個網站或 Web 應用程式的一個應用程式集區。
  • 將站台資料夾和檔案限制為應用程式集區身分識別。
  • 每個站台設定個別的 ASP.NET 暫存資料夾,並且只授與存取權給應用程式集區身分識別。
  • 請務必將站台根目錄上的 ACL (存取控制清單) 設定為僅允許存取應用程式集區身分識別。

如果您的每個應用程式集區有多個應用程式,請考慮建立足夠的應用程式集區並將部分應用程式移動到新的集區。

建立應用程式集區

  1. 開啟 IIS 管理員。
  2. 在 [連線] 窗格中,按一下 [應用程式集區]
  3. 在 [動作] 窗格中,按一下 [新增應用程式集區]
  4. 在 [名稱] 方塊中,輸入應用程式集區的唯一名稱。
  5. 選取 [.NET Framework 版本] 和 [Managed 管線模式]
  6. 按一下 [確定]。

將應用程式移動到另一個應用程式集區

  1. 開啟 IIS 管理員。
  2. 在 [連線] 頁面中,選取您想要移動的網站或 web 應用程式。
  3. 在 [動作] 窗格中,按一下 [基本設定]
  4. 在 [編輯站台] 對話方塊中,按一下 [選取] 以開啟 [選取應用程式集區] 對話方塊,然後從 [應用程式集區] 功能表選取應用程式集區。
  5. 按一下 [確定] 關閉 [選取應用程式集區] 對話方塊,然後按一下 [確定] 關閉 [編輯站台] 功能表。

將應用程式集區身分識別新增至資料夾或檔案 ACL

  1. 開啟 [Windows 檔案總管] 並瀏覽到資料夾或檔案。
  2. 以滑鼠右鍵按一下資料夾或檔案,然後按一下 [內容]
  3. 選取 [安全性] 索引標籤,然後按一下 [編輯]
  4. 按一下 [新增]、按一下 [位置],然後選取您的伺服器做為要搜尋的位置。
  5. 在 [輸入要選取的物件名稱] 方塊中,輸入 IIS APPPOOL\applicationPoolName,其中 applicationPoolName 是應用程式集區身分識別。
  6. 依序按一下 [確定]、[確定],再按一下 [確定] 以關閉對話方塊。

4.2. .NET 信任層級

本節說明如何使用 IIS 管理員 UI 或命令列來設定應用程式信任層級。

使用 UI 設定信任層級

  1. 開啟 IIS 管理員並流覽至您想要管理的層級。
  2. 在 [功能檢視] 中,連按兩下 [.NET 信任層級]
  3. 在 [.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 設定表單驗證

  1. 開啟 IIS 管理員並流覽至您想要管理的層級。
  2. 在 [功能檢視] 中,連按兩下 [驗證]
  3. 在 [驗證] 頁面上,選取 [表單驗證]
  4. 在 [動作] 窗格中,按一下 [啟用] 以使用預設設定的表單驗證。
  5. 在 [動作] 窗格中,按一下 [編輯]
  6. 在 [編輯表單驗證設定] 對話方塊的 [登入 URL] 文字方塊中,輸入用戶端登入的頁面名稱。
  7. 在 [ 驗證 Cookie 逾時 (分鐘) ] 文字方塊中,輸入您想要用於逾時值的分鐘數。
  8. 從 [模式] 清單中,選取您想要使用的 Cookie 模式。
  9. 在 [名稱] 文字方塊中,輸入 Cookie 的名稱。
  10. 從 [保護模式] 清單中,選取您想要使用的保護模式。
  11. 選取 [需要 SSL] 核取方塊。
  12. 選取 [延長每個要求的 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 設定模擬驗證

  1. 開啟 IIS 管理員,然後流覽至您想要管理的層級。
  2. 在 [功能檢視] 中,連按兩下 [驗證]
  3. 在 [驗證] 頁面上,選取 [ASP.NET 模擬]
  4. 在 [動作] 窗格中,按一下 [啟用] 以使用預設設定的 ASP.NET 模擬驗證。
  5. (選擇性) 在 [動作] 窗格中,按一下 [編輯] 設定安全性原則。
  6. 在 [編輯 ASP.NET 模擬設定] 對話方塊中,選取 [特定使用者] 或 [已驗證的使用者]。 無論您選取何者,IIS 都會使用此身分識別做為 ASP.NET 應用程式的資訊安全內容。 根據預設,IIS 8 會設定為模擬已驗證的使用者。
  7. 按一下 [確定] 完成,或繼續下一個選擇性步驟變更要模擬的身分識別。
  8. (選擇性) 按一下 [設定] 變更 [特定使用者] 身分識別。
  9. 在 [設定認證] 對話方塊,針對 IIS 要用於匿名存取的新帳戶,在 [使用者名稱] 中輸入現有的使用者帳戶名稱,在 [密碼] 中輸入與該使用者帳戶關聯的密碼,然後在 [確認密碼] 中輸入完全相同的值。
  10. 按一下 [確定] 關閉 [設定認證] 對話方塊。
  11. 按一下 [確定] 關閉 [編輯 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 產生機器金鑰

  1. 開啟 IIS 管理員,然後流覽至您想要管理的層級。
  2. 在 [功能檢視] 中,連按兩下 [機器金鑰]
  3. 在 [機器金鑰] 頁面上,從 [驗證方法] 清單選取驗證方法。 預設的驗證方法為 [SHA1]
  4. 從 [加密方法] 清單選擇加密方法。 預設的加密方法為 [自動]
  5. (選擇性) 設定驗證設定和解密金鑰。
  6. 在 [動作] 窗格中,按一下 [產生金鑰],然後按一下 [套用]

4.5. TLS/SSL 通訊

本節說明如何為您的應用程式設定 TLS/SSL 安全性。

從憑證授權單位 (CA) 取得伺服器憑證之後,逐步完成下列各節中的程序:

  1. SSL 繫結
  2. 您的站台需要使用 SSL
  3. 用戶端憑證

SSL 繫結

本節說明如何使用 IIS 管理員 UI 或命令列,新增 SSL 繫結至您的站台。

使用 UI 將 SSL 系結新增至網站

  1. 開啟 IIS 管理員。
  2. 在 [連線] 窗格中,展開樹狀目錄中的 [站台] 節點,然後按一下以選取您要新增繫結的站台。
  3. 在 [動作] 窗格中,按一下 [繫結]
  4. 在 [站台繫結] 對話方塊中,按一下 [新增]
  5. 在 [新增站台繫結] 對話方塊中,在 [類型] 清單中選取 [https]
  6. 從 [IP 位址] 清單中,選取 [全部未指派] (除非您想要使用特定 IP 位址)。
  7. 在 [連接埠] 方塊中,輸入連接埠號碼 (預設為 443)。
  8. 在 [主機名稱] 方塊中,輸入主機電腦的名稱。
  9. 如果您想要使用相同 IP 位址服務多個安全的網站,請選取 [需要伺服器名稱指示] 核取方塊。
  10. 從 [SSL 憑證] 清單中,選取您網站的憑證。 如果您的憑證未出現在清單中,請按一下 [ 選取 ],並使用 [ 選取憑證 ] 對話方塊搜尋憑證。
  11. 按一下 [確定]。

使用命令列將 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

  1. 開啟 IIS 管理員,然後流覽至您想要管理的層級。 請確定您是在站台、應用程式或目錄層級。在伺服器層級無法使用 [SSL 設定]

    注意

    如果您想要在檔案層級設定 SSL,請在 [內容檢視] 中瀏覽至檔案,然後在 [動作] 窗格中按一下 [切換到功能檢視]

  2. 在 [功能檢視] 中,連按兩下 [SSL 設定]

  3. 在 [SSL 設定] 頁面上,選取 [需要 SSL]

  4. 在 [動作] 窗格中,按一下 [套用]

使用命令列設定需要 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 指定用戶端憑證

  1. 開啟 IIS 管理員,然後流覽至您想要管理的層級。 請確定您是在站台、應用程式或目錄層級。在伺服器層級無法使用 [SSL 設定]

    注意

    如果您想要在檔案層級設定 SSL,請在 [內容檢視] 中瀏覽至檔案,然後在 [動作] 窗格中按一下 [切換到功能檢視]

  2. 在 [功能檢視] 中,連按兩下 [SSL 設定]

  3. 在 [SSL 設定] 頁面上,選擇性選取 [需要 SSL]。 您不需要 SSL 就可以 [略過] 或 [接受] 用戶端憑證。

  4. 在 [SSL 設定] 頁面的 [用戶端憑證] 區域中,請使用下列其中一個程序:

    • 如果您不想接受用戶端憑證 (即使用戶端出示),請選取 [略過]
    • 選取 [接受 ] 以接受用戶端憑證。
    • 選取 [需要] 為需要用戶端憑證。 若要使用 [需要用戶端憑證],您必須啟用 [需要 SSL]
  5. 在 [動作] 窗格中,按一下 [套用]

使用命令列指定用戶端憑證

若要指定是否使用用戶端憑證,請使用下列語法:

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