更新:2007 年 11 月html
提供從多臺服務器上的一個加密文件建立、導出和導入加密密鑰對已加密的 Web.config 文件的節進行解密的逐步驟示例。web
因爲您能夠對存儲在配置文件中的敏感信息進行加密,「受保護配置」有助於提升應用程序的安全性。在 .NET Framework 處理配置文件時,它會自動解密該文件,並且解密時不須要任何其餘代碼。可使用 aspnet_regiis.exe 對配置文件的節進行加密並管理加密密鑰。有關受保護的配置的更多信息,請參見使用受保護的配置加密配置信息。c#
「受保護配置」使您可以建立、刪除、導出和導入自定義的加密密鑰以用於 RsaProtectedConfigurationProvider 提供程序。您能夠建立加密密鑰的備份副本或將加密密鑰複製到多臺 Web 服務器(如網絡場),這樣便可將包含已加密 Web.config 文件的應用程序複製到多個位置。瀏覽器
在本演練中,您將學會如何執行如下任務:安全
建立自定義的 RSA 密鑰容器。服務器
指定使用自定義 RSA 密鑰容器的「受保護配置」提供程序。網絡
使用自定義 RSA 密鑰容器對 Web.config 文件的節進行加密。app
將自定義的 RSA 密鑰容器導出到 XML 文件。編輯器
從 XML 文件導入自定義的 RSA 密鑰容器。ide
若要完成本演練,您須要:
在將要承載該站點的計算機上安裝並配置 Microsoft Internet 信息服務 (IIS)。
有關如何安裝和配置 IIS 的詳細信息,請參見 IIS 安裝隨附的聯機幫助或轉到 「Internet Information Services (IIS) 6.0 Technical Resources」(Internet 信息服務 (IIS) 6.0 技術資源)。
ASP.NET 網站。
若是您有網站,則能夠在本演練中使用該網站。不然,有關如何建立虛擬目錄或網站的詳細信息,請參見如何:在 IIS 5.0 和 6.0 中建立和配置虛擬目錄。
在本演練的這一部分中,您將經過使用帶有 -pc 選項的 aspnet_regiis.exe 來建立 RSA 密鑰容器。這將把 RSA 密鑰容器標識爲用戶級別的密鑰容器。必須將 RSA 密鑰容器標識爲用戶級別(使用 -pku 選項)或計算機級別(不使用 -pku 選項)。有關計算機級別和用戶級別的 RSA 密鑰容器的更多信息,請參見瞭解計算機級別和用戶級別的 RSA 密鑰容器。
打開命令提示。
爲此,在 Microsoft Windows 中單擊「開始」,再單擊「運行」,在「打開」框中鍵入「cmd」,而後單擊「肯定」。
在命令提示處,經過鍵入如下命令將目錄更改成 .NET Framework 2.0 版目錄:
「cd \WINDOWS\Microsoft.Net\Framework\v2.0.*」
經過運行帶有下列選項的 aspnet_regiis.exe 來建立計算機級別的新 RSA 密鑰容器:
-pc 選項後跟 RSA 密鑰容器的名稱,用於建立 RSA 密鑰對。
-exp 選項,用於確保密鑰是可導出的。
下面的命令將建立 "MyKeys" 密鑰容器。
aspnet_regiis -pc "MyKeys" -exp
請勿關閉「命令提示」窗口。
ASP.NET 應用程序的標識必須能讀取用於加密和解密已加密節的加密密鑰,才能對 Web.config 文件中的已加密信息進行解密。
打開文本編輯器,而後將下面的代碼複製到一個新文件中。
<%@ Page Language="VB" %>
<%
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
%>
<%@ Page Language="C#" %>
<%
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
%>
在應用程序目錄中將該文件另存爲 「identity.aspx」。
若要肯定 ASP.NET 應用程序的標識,請在瀏覽器中打開 identity.aspx。
瀏覽器中將出現 ASP.NET 應用程序的模擬標識。
![]() |
---|
對於該演練,請不要對您的站點使用模擬身份驗證。即只對該演練使用匿名身份驗證做爲 ASP.NET 應用程序的標識。對於本演練,若是您的應用程序的標識爲您當前登陸所用的用戶 ID(如 DOMAIN\userid),請在該應用程序的 Web.config 文件中禁用模擬。若要禁用模擬,請編輯 Web.config 文件並移除 <identity> 元素。完成此更改後,請更新瀏覽器中的 identity.aspx 以顯示修改後的應用程序標識。 |
在命令提示處,經過運行 aspnet_regiis.exe 使用下列選項授予標識對 RSA 密鑰容器的訪問權限:
-pa 選項後跟名爲 "MyKeys" 的 RSA 密鑰容器。
在前一步中肯定的 ASP.NET 應用程序的標識。
例如,下面的命令授予 NETWORK SERVICE 賬戶對計算機級別的 "MyKeys" RSA 密鑰容器的訪問權限。
![]() |
---|
在運行 Windows Server 2003 的計算機上,若是在 Web.config 文件中禁用了 ASP.NET 應用程序的模擬,則該應用程序的標識將爲 NETWORK SERVICE 賬戶(對於 Windows 的早期版本,此標識爲本地 ASPNET 賬戶)。 |
aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"
在這部分演練中,您將在 ASP.NET 應用程序的 Web.config 文件中指定「受保護配置」提供程序的實例。「受保護配置」提供程序的實例使用名爲 "MyKeys" 的計算機級別 RSA 密鑰容器,該實例是在上述過程當中建立的。
打開文本編輯器,而後打開 ASP.NET 應用程序的 Web.config 文件。
若是 ASP.NET 應用程序沒有 Web.config 文件,請打開文本編輯器,而後將示例配置複製到一個新文件中。在 ASP.NET 應用程序目錄中,將文件另存爲 web.config。
確保該配置包括 <connectionStrings> 元素,以下面的示例所示。
<configuration> <connectionStrings> <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" /> </connectionStrings> </configuration>
添加 <configProtectedData> 節,其中包括名爲 "MyProvider" 的 RsaProtectedConfigurationProvider 類的實例,這個類使用名爲 "MyKeys", 的計算機級別 RSA 密鑰容器,以下面的示例所示。
<configuration> <configProtectedData> <providers> <add name="MyProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="MyKeys" useMachineContainer="true" /> </providers> </configProtectedData> <connectionStrings> <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" /> </connectionStrings> </configuration>
保存並關閉 Web.config 文件。
既然已經指定使用 "MyKeys" RSA 密鑰容器的 RsaProtectedConfigurationProvider 類的實例,而且 ASP.NET 應用程序的標識可以讀取 "MyKeys",請使用 "MyKeys" 對 ASP.NET 應用程序的 Web.config 文件的節進行加密,而後 ASP.NET 在處理 Web.config 文件時會對文件的節進行解密。
在命令提示處,運行帶有下列選項的 aspnet_regiis.exe:
-pe 選項,後跟 "connectionStrings",用於對應用程序的 Web.config 文件的 <connectionStrings> 元素進行加密。
-app 選項,用於標識應用程序的名稱。
-prov 選項後跟 "MyProvider",用於標識在上述步驟中 Web.config 文件中指定的 RsaProtectedConfigurationProvider 提供程序。
例如,下面的命令將加密 MyApplication 應用程序的 Web.config 文件的 <connectionStrings> 節。
aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"
打開 Web.config 文件並查看已加密的內容。
內容與下面的示例 Web.config 文件相似。
<configuration> <configProtectedData> <providers> <add name="MyProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0, Culture=neutral, PublicKeyToken= b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="MyKeys" useMachineContainer="true" /> </providers> </configProtectedData> <connectionStrings configProtectionProvider="MyProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#"> <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"> <KeyName>RSA Key </KeyName> </KeyInfo> <CipherData> <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings> </configuration>
關閉 Web.config 文件。
ASP.NET 在處理 Web.config 文件時會自動對該文件的內容進行解密。所以,不須要任何步驟便可對已加密的配置設置進行解密,供其餘 ASP.NET 功能使用或用於訪問代碼中的值。可是,若要查看已解密的設置,您能夠遵循下面的步驟操做。
打開文本編輯器,而後將下面的 ASP.NET 代碼複製到一個新文件中。
<%@ Page Language="VB" %>
<%@ Import Namespace="System.Configuration" %> <script runat="server"> Public Sub Page_Load() ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings ConnectionStringsGrid.DataBind() End Sub </script> <html> <body> <form runat="server"> <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" /> </form> </body> </html>
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Configuration" %> <script runat="server"> public void Page_Load() { ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings; ConnectionStringsGrid.DataBind(); } </script> <html> <body> <form runat="server"> <asp:GridView runat="server" CellPadding="4" id="ConnectionStringsGrid" /> </form> </body> </html>
將該文件另存爲 「walkthrough.aspx」,而後在瀏覽器中查看該文件。
您將看到加密的 Web.config 文件中已解密的值。
能夠將 RSA 密鑰容器導出到一個 XML 文件做爲密鑰值的備份副本,或者將密鑰容器複製到其餘 Web 服務器,這些服務器將承載包括已加密的 Web.config 文件的應用程序的副本。若是沒有用於加密 Web.config 文件的特定 RSA 密鑰容器,則 ASP.NET 將沒法對已加密的配置值進行解密。
在命令提示處,運行帶有下列選項的 aspnet_regiis.exe:
-px 選項後跟 "MyKeys",它是在本演練的前一部分「建立自定義的 RSA 密鑰容器」中建立的 RSA 密鑰容器的名稱。
將密鑰容器導出到的 .xml 文件的路徑。
-pri 選項,用於確保已導出私鑰信息。不然,導出的密鑰信息只能對信息進行加密,而不能進行解密。
例如,下面的命令將名爲 "MyKeys" 的計算機級別 RSA 密鑰容器導出到名爲 keys.xml 的 .xml 文件,該文件位於 C 驅動器的根目錄下。
aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri
![]() |
---|
爲了確保沒有人能夠對已經用 RSA 密鑰容器加密的 Web.config 文件進行解密,將 RSA 密鑰容器導出到 .xml 文件後,請將 .xml 文件複製到 Web 服務器的外部位置,而後從 Web 服務器上刪除該文件。 |
您如今具備使用已加密的 Web.config 文件將應用程序複製到獨立 Web 服務器所需的全部信息。
若是要使用已加密的 Web.config 文件將應用程序複製到獨立的 Web 服務器中,請轉到步驟 4。
若是您沒有第二臺須要複製 Web 應用程序的 Web 服務器,而且要繼續本演練,請完成下面的步驟從 Web 服務器中刪除 RSA 密鑰容器。而後,將這臺 Web 服務器視爲第二臺 Web 服務器。
若要刪除 RSA 密鑰容器,請在命令提示處運行帶有 -pz 開關的 aspnet_regiis.exe,後跟 "MyKeys"。
例如,下面的命令將刪除 "MyKeys":
aspnet_regiis -pz "MyKeys"
轉到步驟 5。
將包括已加密的 Web.config 文件的 Web 應用程序複製到另外一臺 Web 服務器。
若是您不肯定如何將 Web 應用程序複製到第二臺服務器,請將現有應用程序中的全部文件夾和內容複製到第二臺 Web 服務器中,而後按照如何:在 IIS 5.0 和 6.0 中建立和配置虛擬目錄中的步驟將應用程序標識爲 Web 應用程序。
在第二臺服務器上,打開命令提示窗口,而後輸入如下命令將目錄更改成 .NET Framework 2.0 版目錄:
cd \WINDOWS\Microsoft.Net\Framework\v2.0.*
將包含已導出的 RSA 密鑰容器的 .xml 文件複製到第二臺 Web 服務器上的 .NET Framework 2.0 版的目錄中。
在此演練中,將 keys.xml 文件複製到驅動器 C 的根目錄下。
在第二臺 Web 服務器的命令提示處,運行帶有下列選項的 aspnet_regiis.exe:
-pi 選項,後跟已導出的密鑰容器的名稱 "MyKeys",用於導入 RSA 密鑰容器。
包含已導出的密鑰容器的 .xml 文件的路徑
例如,下面的命令會導入名稱爲 "MyKeys" 的 RSA 密鑰容器。
aspnet_regiis -pi "MyKeys" "c:\keys.xml"
在第二臺 Web 服務器上,刪除包含已導出的 RSA 密鑰容器的 .xml 文件的副本。
在第二臺 Web 服務器上,肯定 ASP.NET 應用程序的標識,並按照本演練的前一部分「授予對 RSA 加密密鑰的讀取權限」中的步驟授予該標識對已導入的 RSA 密鑰容器的訪問權限。
在第二臺 Web 服務器上,遵循上述部分中的步驟查看已加密 Web.config 文件中的已解密配置設置。