加密webconfig中的鏈接字符串,利用RSA非對稱加密,利用windows保存密鑰容器

演練:建立和導出 RSA 密鑰容器

Visual Studio 2010
其餘版本

更新: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

若要完成本演練,您須要:

在本演練的這一部分中,您將經過使用帶有 -pc 選項的 aspnet_regiis.exe 來建立 RSA 密鑰容器。這將把 RSA 密鑰容器標識爲用戶級別的密鑰容器。必須將 RSA 密鑰容器標識爲用戶級別(使用 -pku 選項)或計算機級別(不使用 -pku 選項)。有關計算機級別和用戶級別的 RSA 密鑰容器的更多信息,請參見瞭解計算機級別和用戶級別的 RSA 密鑰容器

建立計算機級的 RSA 密鑰容器

  1. 打開命令提示。

    • 爲此,在 Microsoft Windows 中單擊「開始」,再單擊「運行」,在「打開」框中鍵入「cmd」,而後單擊「肯定」。

  2. 在命令提示處,經過鍵入如下命令將目錄更改成 .NET Framework 2.0 版目錄:

    「cd \WINDOWS\Microsoft.Net\Framework\v2.0.*」

  3. 經過運行帶有下列選項的 aspnet_regiis.exe 來建立計算機級別的新 RSA 密鑰容器:

    • -pc 選項後跟 RSA 密鑰容器的名稱,用於建立 RSA 密鑰對。

    • -exp 選項,用於確保密鑰是可導出的。

    下面的命令將建立 "MyKeys" 密鑰容器。

    aspnet_regiis -pc "MyKeys" -exp

    請勿關閉「命令提示」窗口。

ASP.NET 應用程序的標識必須能讀取用於加密和解密已加密節的加密密鑰,才能對 Web.config 文件中的已加密信息進行解密。

授予 ASP.NET 標識對 RSA 密鑰容器的訪問權限

  1. 打開文本編輯器,而後將下面的代碼複製到一個新文件中。

    VB
     
    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    C#
     
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. 在應用程序目錄中將該文件另存爲 「identity.aspx」。

  3. 若要肯定 ASP.NET 應用程序的標識,請在瀏覽器中打開 identity.aspx。

    瀏覽器中將出現 ASP.NET 應用程序的模擬標識。

    2w117ede.alert_note(zh-cn,VS.100).gif說明:

    對於該演練,請不要對您的站點使用模擬身份驗證。即只對該演練使用匿名身份驗證做爲 ASP.NET 應用程序的標識。對於本演練,若是您的應用程序的標識爲您當前登陸所用的用戶 ID(如 DOMAIN\userid),請在該應用程序的 Web.config 文件中禁用模擬。若要禁用模擬,請編輯 Web.config 文件並移除 <identity> 元素。完成此更改後,請更新瀏覽器中的 identity.aspx 以顯示修改後的應用程序標識。

  4. 在命令提示處,經過運行 aspnet_regiis.exe 使用下列選項授予標識對 RSA 密鑰容器的訪問權限:

    • -pa 選項後跟名爲 "MyKeys" 的 RSA 密鑰容器。

    • 在前一步中肯定的 ASP.NET 應用程序的標識。

    例如,下面的命令授予 NETWORK SERVICE 賬戶對計算機級別的 "MyKeys" RSA 密鑰容器的訪問權限。

    2w117ede.alert_note(zh-cn,VS.100).gif說明:

    在運行 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 密鑰容器,該實例是在上述過程當中建立的。

若要指定「受保護配置」提供程序的實例

  1. 打開文本編輯器,而後打開 ASP.NET 應用程序的 Web.config 文件。

    • 若是 ASP.NET 應用程序沒有 Web.config 文件,請打開文本編輯器,而後將示例配置複製到一個新文件中。在 ASP.NET 應用程序目錄中,將文件另存爲 web.config。

  2. 確保該配置包括 <connectionStrings> 元素,以下面的示例所示。

     
     
    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  3. 添加 <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>
    
  4. 保存並關閉 Web.config 文件。

既然已經指定使用 "MyKeys" RSA 密鑰容器的 RsaProtectedConfigurationProvider 類的實例,而且 ASP.NET 應用程序的標識可以讀取 "MyKeys",請使用 "MyKeys" 對 ASP.NET 應用程序的 Web.config 文件的節進行加密,而後 ASP.NET 在處理 Web.config 文件時會對文件的節進行解密。

對 Web.config 文件的 <connectionStrings> 節進行加密

  1. 在命令提示處,運行帶有下列選項的 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"

  2. 打開 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>
    
  3. 關閉 Web.config 文件。

ASP.NET 在處理 Web.config 文件時會自動對該文件的內容進行解密。所以,不須要任何步驟便可對已加密的配置設置進行解密,供其餘 ASP.NET 功能使用或用於訪問代碼中的值。可是,若要查看已解密的設置,您能夠遵循下面的步驟操做。

查看已解密的配置值

  1. 打開文本編輯器,而後將下面的 ASP.NET 代碼複製到一個新文件中。

    VB
     
    <%@ 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> 
    C#
     
    <%@ 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> 
  2. 將該文件另存爲 「walkthrough.aspx」,而後在瀏覽器中查看該文件。

    您將看到加密的 Web.config 文件中已解密的值。

能夠將 RSA 密鑰容器導出到一個 XML 文件做爲密鑰值的備份副本,或者將密鑰容器複製到其餘 Web 服務器,這些服務器將承載包括已加密的 Web.config 文件的應用程序的副本。若是沒有用於加密 Web.config 文件的特定 RSA 密鑰容器,則 ASP.NET 將沒法對已加密的配置值進行解密。

查看已解密的配置值

  1. 在命令提示處,運行帶有下列選項的 aspnet_regiis.exe:

    • -px 選項後跟 "MyKeys",它是在本演練的前一部分「建立自定義的 RSA 密鑰容器」中建立的 RSA 密鑰容器的名稱。

    • 將密鑰容器導出到的 .xml 文件的路徑。

    • -pri 選項,用於確保已導出私鑰信息。不然,導出的密鑰信息只能對信息進行加密,而不能進行解密。

    例如,下面的命令將名爲 "MyKeys" 的計算機級別 RSA 密鑰容器導出到名爲 keys.xml 的 .xml 文件,該文件位於 C 驅動器的根目錄下。

    aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    2w117ede.alert_note(zh-cn,VS.100).gif說明:

    爲了確保沒有人能夠對已經用 RSA 密鑰容器加密的 Web.config 文件進行解密,將 RSA 密鑰容器導出到 .xml 文件後,請將 .xml 文件複製到 Web 服務器的外部位置,而後從 Web 服務器上刪除該文件。

    您如今具備使用已加密的 Web.config 文件將應用程序複製到獨立 Web 服務器所需的全部信息。

  2. 若是要使用已加密的 Web.config 文件將應用程序複製到獨立的 Web 服務器中,請轉到步驟 4。

  3. 若是您沒有第二臺須要複製 Web 應用程序的 Web 服務器,而且要繼續本演練,請完成下面的步驟從 Web 服務器中刪除 RSA 密鑰容器。而後,將這臺 Web 服務器視爲第二臺 Web 服務器。

    1. 若要刪除 RSA 密鑰容器,請在命令提示處運行帶有 -pz 開關的 aspnet_regiis.exe,後跟 "MyKeys"

      例如,下面的命令將刪除 "MyKeys"

      aspnet_regiis -pz "MyKeys"

    2. 轉到步驟 5。

  4. 將包括已加密的 Web.config 文件的 Web 應用程序複製到另外一臺 Web 服務器。

    • 若是您不肯定如何將 Web 應用程序複製到第二臺服務器,請將現有應用程序中的全部文件夾和內容複製到第二臺 Web 服務器中,而後按照如何:在 IIS 5.0 和 6.0 中建立和配置虛擬目錄中的步驟將應用程序標識爲 Web 應用程序。

  5. 在第二臺服務器上,打開命令提示窗口,而後輸入如下命令將目錄更改成 .NET Framework 2.0 版目錄:

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  6. 將包含已導出的 RSA 密鑰容器的 .xml 文件複製到第二臺 Web 服務器上的 .NET Framework 2.0 版的目錄中。

    在此演練中,將 keys.xml 文件複製到驅動器 C 的根目錄下。

  7. 在第二臺 Web 服務器的命令提示處,運行帶有下列選項的 aspnet_regiis.exe:

    • -pi 選項,後跟已導出的密鑰容器的名稱 "MyKeys",用於導入 RSA 密鑰容器。

    • 包含已導出的密鑰容器的 .xml 文件的路徑

    例如,下面的命令會導入名稱爲 "MyKeys" 的 RSA 密鑰容器。

    aspnet_regiis -pi "MyKeys" "c:\keys.xml"

  8. 在第二臺 Web 服務器上,刪除包含已導出的 RSA 密鑰容器的 .xml 文件的副本。

  9. 在第二臺 Web 服務器上,肯定 ASP.NET 應用程序的標識,並按照本演練的前一部分「授予對 RSA 加密密鑰的讀取權限」中的步驟授予該標識對已導入的 RSA 密鑰容器的訪問權限。

  10. 在第二臺 Web 服務器上,遵循上述部分中的步驟查看已加密 Web.config 文件中的已解密配置設置。

相關文章
相關標籤/搜索