在asp.net2.0中新增了對(duì)web.config中的部分?jǐn)?shù)據(jù)進(jìn)行加密的功能,可以使用rsaprotectedconfigurationprovider和dpapiprotectedconfigurationprovider來加密,本文說明使用rsaprotectedconfigurationprovidert和計(jì)算機(jī)級(jí)別的密鑰容器進(jìn)行加密的步驟。
1. 首先確定要進(jìn)行加密的web.config中的配置節(jié)是否可以加密
2. 創(chuàng)建rsa密鑰容器
3. 在web.config中標(biāo)識(shí)要使用的密鑰容器
4. 對(duì)web.config進(jìn)行加密
5. 授予對(duì) rsa 密鑰容器的訪問權(quán)限
step 1:首先確定要進(jìn)行加密的web.config中的配置節(jié)是否可以加密
asp.net 2.0支持對(duì)web.config的部分配置節(jié)進(jìn)行加密,以下配置節(jié)中的數(shù)據(jù)是不能進(jìn)行加密的:
<processmodel>
<runtime>
<mscorlib>
<startup>
<system.runtime.remoting>
<configprotecteddata>
<satelliteassemblies>
<cryptographysettings>
<cryptonamemapping>
<cryptoclasses>
step2:創(chuàng)建 rsa 密鑰容器
若要?jiǎng)?chuàng)建 rsa 密鑰容器,請(qǐng)使用 asp.net iis 注冊(cè)工具 (aspnet_regiis.exe) 及 –pc 開關(guān)。必須為密鑰容器指定一個(gè)名稱,該名稱標(biāo)識(shí)應(yīng)用程序的 web.config 文件的 configprotecteddata 節(jié)中指定的 rsaprotectedconfigurationprovider 所使用的密鑰容器。為確保可以導(dǎo)出新創(chuàng)建的 rsa 密鑰容器,必須包括 -exp 選項(xiàng)。
例如,下面的命令創(chuàng)建一個(gè)名為 abeenkeys 的 rsa 密鑰容器,該容器是可導(dǎo)出的計(jì)算機(jī)級(jí)密鑰容器。
aspnet_regiis -pc "abeenkeys"–exp
step 3: modify web.config to identify the key container
編輯web.config文件以標(biāo)識(shí)要使用的密鑰容器
在web.config中加以<configprotecteddata>來配置密鑰容器, 使用名為 abeenkeys 的計(jì)算機(jī)級(jí) rsa 密鑰容器的
在<configuration>中加入xmlns屬性
<configuration xmlns="http://schemas.microsoft.com/.netconfiguration/v2.0">使用名為 abeenkeys 的計(jì)算機(jī)級(jí) rsa 密鑰容器的 saprotectedconfigurationprovider。
<configprotecteddata > <providers> <add name="abeenprovider" type="system.configuration.rsaprotectedconfigurationprovider, system.configuration, version=2.0.0.0,culture=neutral, processorarchitecture=msil" keycontainername="abeenkeys"/> </providers> </configprotecteddata>
step 4: encrypt the <connectionstrings> section of your web.config file
加密你的web.config文件中的配置節(jié)
> aspnet_regiis -pe "connectionstrings" -app "/connectiontest"
step 5:授予對(duì) rsa 密鑰容器的訪問權(quán)限
可以通過以下代碼確定應(yīng)該給哪個(gè)用戶權(quán)限
response.write(system.security.principal.windowsidentity.getcurrent().name);
默認(rèn)情況下,rsa 密鑰容器受到所在服務(wù)器上的 ntfs 訪問控制列表 (acl) 的嚴(yán)密保護(hù)。這樣能夠限制可以訪問加密密鑰的人員,從而增強(qiáng)加密信息的安全性。必須首先向 asp.net 應(yīng)用程序的進(jìn)程標(biāo)識(shí)授予對(duì)該 rsa 密鑰容器的讀取訪問權(quán)限,然后 asp.net 才能使用 rsa 密鑰容器。可以使用 aspnet_regiis.exe 工具及 -pa 開關(guān),向 asp.net 應(yīng)用程序的標(biāo)識(shí)授予讀取 rsa 密鑰容器的權(quán)限。例如,下面的命令向 windows server 2003 network service 帳戶授予對(duì)名為 abeenkeys 的計(jì)算機(jī)級(jí) rsa 密鑰容器的讀取訪問權(quán)限:
aspnet_regiis -pa "abeenkeys" "nt authority/network service"
注意:
如果 rsa 密鑰容器是用戶級(jí)容器,必須以其 windows 配置文件存儲(chǔ)了密鑰的用戶的身份登錄,并且必須包括 -pku 選項(xiàng)以授予對(duì)該用戶級(jí) rsa 密鑰容器的訪問權(quán)限。
若要使用計(jì)算機(jī)配置中指定的默認(rèn) rsaprotectedconfigurationprovider,必須首先向應(yīng)用程序的 windows 標(biāo)識(shí)授予對(duì)名為 netframeworkconfigurationkey 的計(jì)算機(jī)密鑰容器的訪問權(quán)限,該計(jì)算機(jī)密鑰容器是為該默認(rèn)提供程序指定的密鑰容器。例如,下面的命令向 network service 帳戶授予對(duì)默認(rèn) rsaprotectedconfigurationprovider 所使用的 rsa 密鑰容器的訪問權(quán)限。
aspnet_regiis -pa "netframeworkconfigurationkey" "nt authority/network service"
netframeworkconfigurationkey rsa 密鑰容器是 aspnet_regiis.exe 工具所發(fā)出的命令的默認(rèn)密鑰容器。因此上述命令也可以按以下方式發(fā)出:
aspnet_regiis -pa "nt authority/network service"
代碼下載http://www.cnblogs.com/files/abeen/connectiontest.rar
注意:我發(fā)現(xiàn)這個(gè)方法有個(gè)缺陷,哪就是在每次加密完后,重新啟動(dòng)機(jī)算機(jī)發(fā)現(xiàn)iis admin出錯(cuò)了,還得重新安裝 iis 郁悶
新聞熱點(diǎn)
疑難解答
圖片精選