這篇文章主要為大家展示了“C#中NET環(huán)境下WebConfig如何加密”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“C#中NET環(huán)境下WebConfig如何加密”這篇文章吧。
成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括龍鳳網(wǎng)站建設(shè)、龍鳳網(wǎng)站制作、龍鳳網(wǎng)頁制作以及龍鳳網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,龍鳳網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到龍鳳省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!在將ASP.NET項(xiàng)目部署到服務(wù)器上時(shí),內(nèi)網(wǎng)環(huán)境下Web.Config往往是直接復(fù)制過去。對(duì)于外網(wǎng)環(huán)境,則需要對(duì)Web.Config文件進(jìn)行加密。
.NET環(huán)境下一共提供了2種方式的加密功能,分別是DpapiProtectedConfigurationProvider和RsaProtectedConfigurationProvider提供程序。
前者在本機(jī)加密Web.Config后,只能在本機(jī)進(jìn)行解密,如果需要將Config文件復(fù)制到外部主機(jī),則無法進(jìn)行解密。后者在本機(jī)加密Config文件后,可以到處密鑰容器,當(dāng)把Config文件復(fù)制到外部主機(jī)后,可對(duì)先前導(dǎo)出的文件進(jìn)行導(dǎo)入功能,導(dǎo)入后既可自動(dòng)解密。
由于經(jīng)常需要復(fù)制Config文件到外部主機(jī),因此Rsa保護(hù)程序更加適用于實(shí)際業(yè)務(wù)場(chǎng)景,本文將詳細(xì)介紹RsaProtectedConfigurationProvider程序的使用步驟。
1. 使用RsaProvider提供程序,需要首先進(jìn)入.NET Framework運(yùn)行環(huán)境,可以配置環(huán)境變量或使用cd指令。
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
2. 接著便可以使用aspnet_regiis.exe創(chuàng)建一個(gè)Rsa密鑰容器。密鑰容器分用戶級(jí)別和計(jì)算機(jī)級(jí)別兩種情況,由于使用用戶級(jí)別密鑰沒什么益處,一般使用計(jì)算機(jī)級(jí)別既可。
aspnet_regiis -pc "MyKeys" -exp
3. 創(chuàng)建密鑰容器后,還需要設(shè)置密鑰容器的訪問權(quán)限,下面的命令授予NETWORK SERVICE 帳戶對(duì)計(jì)算機(jī)級(jí)別的 “MyKeys” RSA 密鑰容器的訪問權(quán)限。msdn上有一個(gè)aspx程序會(huì)展示你的asp.net程序的用戶標(biāo)志,不過本人實(shí)際執(zhí)行pa指令后會(huì)報(bào)錯(cuò)。
aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"
4. 在Web.Config文件中加上如下配置節(jié)點(diǎn),MyProvider為你的保護(hù)程序名稱,可隨意指定。keyContainerName為前面設(shè)置的密鑰容器名稱,useMachineContainer為true表示使用計(jì)算機(jī)級(jí)別密鑰,為false表示使用使用用戶級(jí)密鑰。
這段配置節(jié)不要像msdn那樣直接放在configure配置節(jié)點(diǎn)下面,這樣會(huì)報(bào)錯(cuò),建議放在你需要加密節(jié)點(diǎn)的后面。
5 .下面的指令將對(duì)指定路徑下的config文件節(jié)點(diǎn)進(jìn)行加密,如果配置文件中還有session的sql連接字符串,也可以對(duì)sessionState節(jié)點(diǎn)進(jìn)行加密。
aspnet_regiis -pef "connectionStrings" "D:\WebApp" -prov "MyProvider"
aspnet_regiis -pef "system.web/sessionState" "D:\WebApp" -prov "MyProvider"
加密后的connectionStrings節(jié)點(diǎn)如下所示,此時(shí)仍可訪問ASP.NET應(yīng)用程序。
Rsa Key X3XoBfbo/h9QUeVUV8A1EGMM0NQuBnhfuC/iV1e7CCmGaiRt9ogmICenTK8VAmGfhufPzWFu5UUHSiO/6BIvYPEO5WoWlj3h6/sUQmRj6NsAJOnrnYHEjta4oQb4XajxazWcf3HUeWR0mG4wDCiUfTZaRIRmXkGgfbxewpsKJ5k= suqFgGjGFaon62YNI2VM5SQymcf4yyAku9fWQuvgClj1bfqixK9kIs9IE0I0m2u4gLbF+y0xPharfcOFJpXHDwHoaCrNQsxsutqiXquX67bYcJeYaMz5ja9ebqAtQvKIiZ/kHGvFIPXSCg5HiW/GGQwaf3FESVEsOaSAJZ3JJk9MlkkwDd6LepgtcCVjLnEK0lOeEFznrngizFFZWAsYjh6UCF5lNxNxf/IBwtznsfiFi2tV1F4sx9HkJEEryf5MEtu1RAA/wqarMvn7dlXhpGconpNPXA1IGlTmaZ/S1bR/FsO39skgHrs+OHsDMbJrI5ZO4TXXbK/DD86GPzu9JXrVKNVImzzW0V8aMc2HcVNClPsMwwgGaH6PNhE0xkjV6YH77XcLdVsKibvnwMlO/4kjGKoNXaSkFBoAEgprzi8=
如果需要解密,可以執(zhí)行下面這條指令aspnet_regiis -pdf "connectionStrings" "D:\WebApp"
6. 導(dǎo)出密鑰容器,密鑰信息將被存儲(chǔ)在導(dǎo)出的xml文件中,pri表示將公鑰和私鑰一起導(dǎo)出。
aspnet_regiis -px "MyKeys" "D:/MyKeys.xml" -pri
7. 有了這個(gè)xml文件,就相當(dāng)于有了密鑰容器,導(dǎo)出密鑰容器后可以對(duì)密鑰容器進(jìn)行刪除,刪除指令如下。
aspnet_regiis -pz "MyKeys"
8. 刪除密鑰容器后,如果前面你沒有對(duì)Config文件進(jìn)行解密,那么運(yùn)行ASP.NET程序?qū)?huì)直接報(bào)錯(cuò)。
在本人實(shí)際操作中發(fā)現(xiàn),如果對(duì)正在運(yùn)行的ASP.NET應(yīng)用程序的Web.Config文件進(jìn)行加密,加密后立即刪除密鑰,此時(shí)點(diǎn)擊運(yùn)行(不調(diào)試)仍可正常訪問。這表明Rsa解密操作在內(nèi)存中執(zhí)行,只有重新生成解決方案或調(diào)試(會(huì)執(zhí)行生成操作)后,訪問才會(huì)報(bào)錯(cuò)。
9. 現(xiàn)在可以將加密后的config文件和導(dǎo)出的MyKeys.xml一起復(fù)制到服務(wù)器上,此時(shí)運(yùn)行網(wǎng)站將會(huì)直接報(bào)錯(cuò),需執(zhí)行下面的導(dǎo)入指令。
aspnet_regiis -pi "MyKeys" "D:/MyKeys.xml"
導(dǎo)入后,在本機(jī)訪問ASP.NET網(wǎng)站會(huì)發(fā)現(xiàn)仍然報(bào)錯(cuò),提示無法open Provider。這個(gè)坑最終在網(wǎng)上找到解決方法,如下面指令所示,需要為應(yīng)用程序池設(shè)置對(duì)密鑰容器的訪問權(quán)限。
aspnet_regiis -pa "MyKeys" "IIS APPPOOL\MyWeb" -full
自此整個(gè)流程已結(jié)束,可以將上面這些指令封裝成2個(gè)批處理程序,一個(gè)是密鑰制作bat,一個(gè)是導(dǎo)入bat,如下所示。
@echo on cd C:\Windows\Microsoft.NET\Framework\v2.0.50727::設(shè)置config地址,config文件要在E:\test下面 set configAddress="E:\test"::創(chuàng)建RSA密鑰容器 aspnet_regiis -pc "MyKeys" -exp ::設(shè)置密鑰容器訪問權(quán)限 aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"::加密 aspnet_regiis -pef "connectionStrings" "D:\WebApp" -prov "MyProvider"aspnet_regiis -pef "system.web/sessionState" "D:\WebApp" -prov "MyProvider"::導(dǎo)出 aspnet_regiis -px "MyKeys" "D:/MyKeys.xml" -pri ::刪除密鑰容器 aspnet_regiis -pz "MyKeys" pause
@echo on cd C:\Windows\Microsoft.NET\Framework\v2.0.50727::刪除舊的密鑰容器 aspnet_regiis -pz "MyKeys" ::導(dǎo)入新的密鑰容器 aspnet_regiis -pi "MyKeys" "D:/MyKeys.xml"::設(shè)置應(yīng)用程序池的訪問權(quán)限 aspnet_regiis -pa "MyKeys" "IIS APPPOOL\MyWeb" -full pause
在寫完這2個(gè)bat后,我想起前面的解密指令aspnet_regiis -pdf "connectionStrings" "D:\WebApp",它只需要提供節(jié)點(diǎn)名稱和路徑。也就是說,如果***者能夠在被***的服務(wù)器上執(zhí)行cmd指令,那么他就可以對(duì)config進(jìn)行解密。這個(gè)問題如有前輩有更好的解決方式,歡迎您指導(dǎo)留言。
如果當(dāng)初微軟編寫這個(gè)指令解析方法時(shí),加上一個(gè)key的參數(shù)。那么即使***者能夠執(zhí)行cmd指令,由于不知道key的名稱,所以仍然無法對(duì)config進(jìn)行解密。
以上是“C#中NET環(huán)境下WebConfig如何加密”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。