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