在asp.net2.0中新增了對web.config中的部分資料進行加密的功能,可以使用RSAProtectedConfigurationProvider和DPAPIProtectedConfigurationProvider來加密,本文說明使用RSAProtectedConfigurationProvidert和電腦層級的金鑰容器進行加密的步驟。
1. 首先確定要進行加密的web.config中的組態節是否可以加密
2. 建立RSA金鑰容器
3. 在web.config中標識要使用的金鑰容器
4. 對web.config進行加密
5. 授予對RSA 金鑰容器的存取權限
Step 1:首先確定要進行加密的web.config中的組態節是否可以加密
ASP.NET 2.0支援對Web.config的部分組態節進行加密,以下組態節中的資料是無法進行加密的:
<processModel>
<runtime>
<mscorlib>
<startup>
<system.runtime.remoting>
<configProtectedData>
<satelliteassemblies>
<cryptographySettings>
<cryptoNameMapping>
<cryptoClasses>
Step2:建立RSA 金鑰容器若要建立RSA 金鑰容器,請使用ASP.NET IIS 註冊工具(Aspnet_regiis.exe) 及–pc 開關。必須為金鑰容器指定一個名稱,該名稱標識應用程式的Web.config 檔案的configProtectedData 節中指定的RsaProtectedConfigurationProvider 所使用的金鑰容器。為確保可以匯出新建立的RSA 金鑰容器,必須包含-exp 選項。
例如,下面的命令會建立一個名為ABeenKeys 的RSA 金鑰容器,該容器是可匯出的電腦層級金鑰容器。
aspnet_regiis -pc "ABeenKeys"–exp
Step 3: Modify web.config to identify the key container
編輯Web.config檔以識別要使用的金鑰容器
在web.config中加以<configProtectedData>來設定金鑰容器, 使用名為ABeenKeys 的電腦級RSA 金鑰容器的在<configuration>中加入xmlns屬性
<configuration xmlns=" http://schemas.microsoft.com/.NetConfiguration/v2.0 ">使用名為ABeenKeys 的電腦級RSA 金鑰容器的saProtectedConfigurationProvider。
<configProtectedData > <providers> <add name="ABeenProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, processorArchitecture=MSvido" keyContainerName="ABILviders > </configProtectedData>
Step 4: Encrypt the <connectionStrings> section of your web.config file
加密你的web.config檔中的設定檔
> aspnet_regiis -pe "connectionStrings" -app "/connectionTest"
Step 5:授予對RSA 金鑰容器的存取權可以透過以下程式碼決定應該給哪個使用者權限
Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
預設情況下,RSA 金鑰容器受到所在伺服器上的NTFS 存取控制清單(ACL) 的嚴密保護。這樣能夠限制可以存取加密金鑰的人員,從而增強加密資訊的安全性。必須先向ASP.NET 應用程式的進程識別碼授予對該RSA 金鑰容器的讀取存取權限,然後ASP.NET 才能使用RSA 金鑰容器。可以使用Aspnet_regiis.exe 工具及-pa 開關,授予ASP.NET 應用程式的識別讀取RSA 金鑰容器的權限。例如,下面的命令向Windows Server 2003 NETWORK SERVICE 帳戶授予對名為ABeenKeys 的電腦級RSA 金鑰容器的讀取存取權:
aspnet_regiis -pa "ABeenKeys" "NT AUTHORITYNETWORK SERVICE"
注意:
如果RSA 金鑰容器是使用者級容器,則必須以其Windows 設定檔儲存了金鑰的使用者的身分登錄,並且必須包含-pku 選項以授予對該使用者級RSA 金鑰容器的存取權限。
若要使用電腦設定中指定的預設RsaProtectedConfigurationProvider,必須先向應用程式的Windows 識別授予對名為NetFrameworkConfigurationKey 的電腦金鑰容器的存取權限,該電腦金鑰容器是為該預設提供者指定的金鑰容器。例如,下列的命令向NETWORK SERVICE 帳戶授予對預設RsaProtectedConfigurationProvider 所使用的RSA 金鑰容器的存取權限。
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITYNETWORK SERVICE"
NetFrameworkConfigurationKey RSA 金鑰容器是Aspnet_regiis.exe 工具所發出的指令的預設金鑰容器。因此上述命令也可以以下方式發出:
aspnet_regiis -pa "NT AUTHORITYNETWORK SERVICE"
代碼下載