zoukankan      html  css  js  c++  java
  • 对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加密就可以了。(省略号)

  • 相关阅读:
    Android JNI之C/C++层调用JAVA
    Android NDK编译之undefined reference to 'JNI_CreateJavaVM'
    Android 开创java世界(JNI Invocation API)
    Android JNI c/c++调用java 无需新建虚拟机
    cmake:善用find_package()提高效率暨查找JNI支持
    如何解决用CMake未定义引用`JNI_CreateJavaVM'?
    [Linker error] undefined reference to `_imp__JNI_CreateJavaVM@12'
    Android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
    【故障公告】部署在 k8s 上的博客后台昨天与今天在访问高峰多次出现 502团队
    上周热点回顾(3.30-4.5)团队
  • 原文地址:https://www.cnblogs.com/cocoulong/p/2985093.html
Copyright © 2011-2022 走看看