HOW TO:建置並執行受保護的組態提供者範例
更新:2007 年 11 月
本章節中的主題包含受保護的組態提供者範例程式碼。範例提供者會使用 TripleDESCryptoServiceProvider 類別加密和解密 Web.config 檔中的組態區段。
本主題描述如何建置此範例以及設定 ASP.NET 應用程式,以便使用範例提供者。Visual Basic 和 C# 中已提供受保護的組態提供者範例,您可以在受保護的組態提供者實作範例中找到。
建置範例提供者
您必須使用 Aspnet_regiis.exe 工具加密 Web.config 檔案區段。您可以使用 Aspnet_regiis.exe 工具明確地執行解密,或是在執行階段以自動方式由 ASP.NET 進行解密。因此,您必須同時讓 Aspnet_regiis.exe 工具和 ASP.NET 能夠使用範例提供者類型。您可以藉由使用強式名稱編譯提供者,並將其置於全域組件快取 (GAC) 中,而輕鬆達到這項目的。
注意事項: |
---|
強式名稱工具 (Sn.exe) 和全域組件快取工具 (Gacutil.exe) 是做為 Windows Software Development Kit (SDK) 安裝的一部分而提供使用。如需詳細資訊,請參閱強式名稱工具 (Sn.exe) 和全域組件快取工具 (Gacutil.exe)。 |
若要建置範例提供者
在 Windows 命令列執行下列命令:
Sn.exe -k keys.snk
這會產生強式名稱金鑰組。
注意事項: 如果無法執行命令,必須在執行命令前將 .NET Framework 路徑加入 PATH 變數。在 Windows 中,以滑鼠右鍵按一下 [我的電腦],然後依序按一下 [內容]、[進階] 索引標籤和 [環境變數] 按鈕。在 [系統變數] 清單中,按兩下 Path 變數。在 [變數值] 文字方塊中,將分號 (;) 加在文字方塊中現有值的結尾,然後輸入 .NET Framework 安裝的路徑。.NET Framework 通常是安裝在 \Microsoft.NET\Framework\versionNumber 的 Windows 安裝資料夾中。
建立名為 TripleDESProtectedConfigurationProvider (依據您使用的程式設計語言而定,副檔名可能是 .vb 或 .cs) 的程式檔,然後從受保護的組態提供者實作範例將範例提供者程式碼複製到該檔案中。
編譯提供者範例程式碼,並使用下列命令指派至結果組件強式名稱金鑰:
vbc /out:TripleDESProtectedConfigurationProvider.dll /t:library TripleDESProtectedConfigurationProvider.vb /r:System.Configuration.dll /keyfile:keys.snk
csc /out:TripleDESProtectedConfigurationProvider.dll /t:library TripleDESProtectedConfigurationProvider.cs /r:System.Configuration.dll /keyfile:keys.snk
使用下列命令列命令,在全域組件快取中安裝組件:
gacutil.exe -i TripleDESProtectedConfigurationProvider.dll
注意事項: 如果需要從 GAC 移除組件,可以搭配下列命令使用 Gacutil.exe 工具:
gacutil.exe -u TripleDESProtectedConfigurationProvider
建立和儲存加密金鑰
受保護之組態提供者的 TripleDES 範例,會使用以十六進位字串儲存在文字檔中的加密金鑰,加密和解密組態區段。您可以使用包含在範例提供者中的程式碼建立金鑰檔。在金鑰檔中,金鑰會儲存在檔案的第一行,而向量 (IV) 儲存在第二行,如下列程式碼範例所示:
EBBCB17E444EBB9EA2EA7EE3E0FD9E108C6E75A90101D017
8C979426981FD2A6
在建立金鑰檔後,您應該將它儲存在伺服器的安全位置中,然後限制只有 ASP.NET 應用程式識別、SYSTEM 帳戶和系統管理員才能存取此金鑰檔。這可以避免攻擊者存取金鑰,而破解您的加密。
若要建立加密金鑰
建立名為 CreateKey 的主控台應用程式。
複製下列程式碼,做為應用程式的主要模組。
Imports System Imports Samples.AspNet.ProtectedConfiguration Public Class CreateKey Public Shared Sub Main(args() As String) Dim filePath As String = args(0) Dim provider As TripleDESProtectedConfigurationProvider = _ New TripleDESProtectedConfigurationProvider() provider.CreateKey(filePath) Console.WriteLine("New TripleDES key written to '{0}'", filePath) End Sub End Class
using System; using Samples.AspNet.ProtectedConfiguration; public class CreateKey { public static void Main(string[] args) { string filePath = args[0]; TripleDESProtectedConfigurationProvider provider = new TripleDESProtectedConfigurationProvider(); provider.CreateKey(filePath); Console.WriteLine("New TripleDES Key written to '{0}'", filePath); } }
受保護的組態提供者範例包含公用 CreateKey 方法,可以將檔案路徑當做輸入、產生新的金鑰,然後將新的金鑰寫入指定檔案。主控台應用程式中的程式碼會建立受保護組態提供者的執行個體,並且呼叫其 CreateKey 方法。程式碼會將檔案路徑當做命令列引數,然後在指定位置建立新的金鑰檔。
在 Windows 命令列中,使用如下列的語法執行主控台應用程式:
CreateKey "c:\WebSites\SampleApplication\App_Data\Keys.txt"
使用 ASP.NET 應用程式中的範例提供者
在編譯提供者並且建立加密金鑰後,您便可以設定 ASP.NET 應用程式使用提供者。
若要在 ASP.NET 應用程式中使用範例提供者
開啟網站的 Web.config 檔。如果應用程式沒有 Web.config 檔,請在網站的根資料夾建立名為 Web.config 的文字檔,然後加入下列項目:
<?xml version="1.0"?> <configuration> <system.web> </system.web> </configuration>
在 configuration 區段 (為 system.web 項目的對等項目) 中加入下列以粗體顯示的項目:
<configuration> <configProtectedData> <providers> <add name="TripleDESProvider" type="Samples.AspNet.ProtectedConfiguration.TripleDESProtectedConfigurationProvider, TripleDESProtectedConfigurationProvider, Version=0.0.0.0, CultureInfo=neutral, PublicKeyToken=a5a9eb4fc5306403, processorArchitecture=MSIL" keyFilePath="c:\WebSites\SampleApplication\App_Data\Keys.txt" /> </providers> </configProtectedData> </configuration>
注意事項: 變更 keyFilePath 屬性的值,以符合稍早建立的金鑰檔儲存位置。
在 configuration 區段中加入 <connectionStrings> 區段,以及一或多個連接字串。
下列程式碼範例示範了包含範例 SQL Server Northwind 資料庫連接字串的 connectionStrings 區段。SQL Server 執行個體的名稱假設為 SampleSQLServer。
<connectionStrings> <add name="NorthwindConnectionString" connectionString="Data Source=SampleSQLServer;Initial Catalog=Northwind;Persist Security Info=True;" Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> </connectionStrings>
注意事項: 變更 connectionString 值,以便包含希望使用的 SQL Server 資料庫連接資訊。
儲存並關閉檔案。
在 Windows 命令列中,執行下列命令加密 Web.config 檔的 connectionStrings 區段:
aspnet_regiis.exe -pe "connectionStrings" -app "/SampleApplication" -prov "TripleDESProvider"
注意事項: 以您希望測試加密的 Web 應用程式名稱取代 SampleApplication。
開啟 Web.config 檔並注意連接字串已經加密。
在 Web 應用程式中使用加密過的連接字串。
例如,加入 SqlDataSource 控制項並將 ConnectionString 屬性設定為 "NorthwindConnectionString,",如下列程式碼範例所示:
<asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" SelectCommand="SELECT ProductName FROM Products"> </asp:SqlDataSource>
將如 GridView 的控制項繫結至 SqlDataSource 控制項。
執行網頁。
請注意,資料是以您期望的方式顯示。在使用連接字串連接至 Northwind 資料庫之前,ASP.NET 已經在執行階段將其解密。