對web.config的ConnectionString加密


      本文參考了wayshan的博客,原文地址:http://www.cnblogs.com/wayshan/archive/2012/04/09/web_config.html

     

      web.config配置文件中,有一些敏感數據希望被保護起來,例如數據庫的連接串ConnectionString,默認情況下是明文顯示的,例如:

1 <appSettings>
2     <!--數據庫鏈接-->
3     <add key="ConnectionString" value="Data Source=127.0.0.1;Initial Catalog=Demo2012;User ID=sa;password=123456"/>
4   </appSettings>

  經過加密之后,配置信息變為:

 1 <appSettings configProtectionProvider="RsaProtectedConfigurationProvider">
 2     <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
 3       xmlns="http://www.w3.org/2001/04/xmlenc#">
 4       <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
 5       <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
 6         <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
 7           <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
 8           <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
 9             <KeyName>Rsa Key</KeyName>
10           </KeyInfo>
11           <CipherData>
12             <CipherValue>FSEEyg/SUlE0SqTip30MSc9a/tUYJSDiJ3nDLkE1iGSYU3vo02KRhsTnbLWRSRLffGGWP65fUJJuj5+qiPNQNX0THjCajF43PrP28u9V1fkXuX/T5BxI4Rg2rjw6mSPLuZ1SaQOjJjXi8ArCYs+83qpCxvjml1UN74RlOpLs6qs=</CipherValue>
13           </CipherData>
14         </EncryptedKey>
15       </KeyInfo>
16       <CipherData>
17         <CipherValue>0Qp07JkMSsyTmHADATQ+rkGCok21XBFH2zvtj4diSSsTNJhi3CzBYw6QfasdpyuG/zf+4RWh4aNJ/IrGavzeSyRa929zAv/RsYpR3GQROWt20zr6d7UJUfDgbm85KyZrQNXLwhcfEiUX5VMJg+g3OUczhiDS8YvQ+JjOCDQQPpv99sj8AT2eNCyJJpKWJpGSf0iBpJmkpNP6MOTYHEEmVQ==</CipherValue>
18       </CipherData>
19     </EncryptedData>
20   </appSettings>

  

  這么長一串,一定不會有人認出來你的數據庫地址和登陸信息了   :)

 

      操作過程如下(RsaProtectedConfigurationProvider加密):

      1:運行cmd,並定位到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727(可以直接運行vs2005的命令提示工具,但是貌似vs2010默認指向的framework3.5里沒有aspnet_regiis命令,為了避免有些人找不到,所以還是直接cmd比較好。)

      2:運行

1 aspnet_regiis -pef "appSettings" "D:\demo"   //顯示"正在加密配置節,成功!"

          這里要注意一下,D:\demo是工程的路徑,可以是絕對路徑,也可以是網站的相對路徑,具體方法可以參考aspnet_regiis的幫助。如果你把web.config放在d盤根目錄下,那么路徑就是"D:\\"。appSettings是要加密的節點名稱,也可以針對某個節點的子節點進行加密,例如

1 aspnet_regiis -pef "system.web/authentication" "D:\demo"

      加密完成后,除了視覺上變為復雜的字符串之外,使用上與加密前是完全相同的。解密時運行參數-pdf,例如:

1 aspnet_regiis -pdf "appSettings" "D:\demo"  //顯示"正在解密配置節,成功!"

     

      經過加密的字符串,雖然可以在本機使用,但是在另外一台電腦上(客戶現場或服務器)是無法直接使用的。需要進行一些配置。

      1:創建秘鑰容器(pc-操作容器 -exp,可導出)

1 aspnet_regiis -pc "MyKey" -exp

      2:導出容器中的秘鑰到xml中(px操作容器文件,注意D:\\后面有一個空格,否則你找不到文件的  ^ ^)

1 aspnet_regiis -px "MyKey" "D:\\ keys.xml" -pri

      3:拷貝你的keys.xml文件到服務器上,並且導入秘鑰。(-pi導入容器里的秘鑰)

1 aspnet_regiis -pi "MyKey" “D:\keys.xml”

      4:賦權限(ASPNET權限)

1 aspnet_regiis -pa "MyKey" "ASPNET"

      5:修改web.config文件,增加:

1  <configuration>
2  <configProtectData defaultProvider="MyProtectedConfigurationProvider">
3  <providers>
4  <add name="MyProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider" cspProviderName="" useMachineContainer="true" useOAEP="false" keyContainerName="SharedKeys"/>
5  </providers>
6  </configProtectedData>
7  </configuration>

      完成!

 

      說了這么多,我累了你也累了。有沒有簡便一些的辦法?有。開發時用明文,部署的時候在客戶現場運行aspnet_regiis加密就可以了。(省略號)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM