简单的解决方法:

WebConfig 加解密,未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误消息为: 打不开 RSA 密钥容器。
问题:未添加用于访问 RSA 密钥容器
命令:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY/NETWORK SERVICE"
注意事项:XP下:aspnet_regiis -pa "NetFrameworkConfigurationKey" "aspnet"
加密:aspnet_regiis -pe "appSettings" -app "/应用程序名"
解密:aspnet_regiis -pd "appSettings" -app "/应用程序名"  如(/PetShop/web)

更灵活的解决方法:
1、创建一个密钥容器 
   aspnet_regiis -pc "ConnectionStringsKey" -exp
   ConnectionStringsKey为密钥容器的名称 
   可以使用aspnet_regiis /?查看该命令的用法

2、在web.config中加入如下内容

  1. <configProtectedData>
  2. <providers>
  3. <clear />
  4. <add name="ConnectionStringsKeyProvider"
  5.         type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
  6.         keyContainerName="ConnectionStringsKey"
  7.         useMachineContainer="true"/>
  8. </providers>
  9. </configProtectedData>

3、通过命令行:用指定的密钥加密指定目录下的web.config文件的指定的配置节
     aspnet_regiis -pef "connectionStrings" "d:/testproj/websitetest" -prov "ConnectionStringsKeyProvider"
    对于子配置节用/分隔表示, 如identity配置节 需要写成 "system.web/identity"
4、如果访问web程序,页面提示 Error message from the provider: The RSA key Container could not be opened.
     是由于network service帐户无法访问密钥文件造成的。 找到密钥文件, 赋予network service读权限。该密钥文件位于(可按时间排序,找到自己产生的那个密钥文件)
vista: c:/ProgramData/Microsoft/Crypto/RSA/MachineKeys/
xp或其他:C:/Documents and Settings/All Users/Application Data/Microsoft/Crypto/RSA/MachineKeys

至此:查看被加密的标记, 内容就已经是被加密过的了。

5.通过.aspx页面:加密连接字符串:界面如图:

后台代码:

  1. //加密按钮
  2. protected void Button1_Click(object sender, EventArgs e)
  3. {
  4. //①需要加密的节点:
  5. string name = @"connectionStrings";
  6. //②当前路径;
  7. string appPath = "/loginContral";
  8. Configuration config = WebConfigurationManager.OpenWebConfiguration(appPath);
  9. //③提供加密的方式:(这里使用自定义的加密方式)
  10. // string provider = "RsaProtectConfigurationProvider";
  11. string provider = "ConnectionStringsKeyProvider";
  12. config.GetSection(name).SectionInformation.ProtectSection(provider);
  13. //⑤保存web.config文件
  14. try
  15. {
  16. config.Save();
  17. }
  18. catch (Exception ex)
  19. {
  20. Response.Write(ex.Message);
  21. }
  22. if (config.GetSection(name).SectionInformation.IsProtected)
  23. {
  24. Button1.Enabled = false;
  25. Response.Write("加密成功!");
  26. }
  27. else
  28. {
  29. Response.Write("加密失败!");
  30. }
  31. }
  32. //解密按钮:
  33. protected void Button2_Click(object sender, EventArgs e)
  34. {
  35. //①需要节密的节点:
  36. string name = @"connectionStrings";
  37. //②当前路径;
  38. string appPath = "/loginContral";
  39. Configuration config = WebConfigurationManager.OpenWebConfiguration(appPath);
  40. //③使用UnprotectSection方法进行解密;
  41. config.GetSection(name).SectionInformation.UnprotectSection();
  42. //④保存web.config文件
  43. config.Save();
  44. if (config.GetSection(name).SectionInformation.IsProtected==false)
  45. {
  46. Button2.Enabled = false;
  47. Response.Write("解密成功!");
  48. }
  49. else
  50. {
  51. Response.Write("解密失败!");
  52. }
  53. }

注意:string appPath = "/loginContral" 为当前项目路径;

加密前的连接字符串:

  1. <connectionStrings>
  2. <add name="connection" connectionString="data source=.;database=aspnetdb;user id=sa;pwd=123;" />
  3. </connectionStrings>

加密后的连接字符串:

  1. <connectionStrings configProtectionProvider="ConnectionStringsKeyProvider">
  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>AepogG4vVhd8K6NVhVmdO8FAGFMopOdDvnBN5vPV0mxP8NgrImnZFvflrhhvooiu56McmMr6n5cUnixzimGB/zTgCNMsIkU8Sr6YtX8iUh64U9IVujwaOAbtZp4AhLhMiH6YwkHXjmqrjYyS2ecsocquZQ0ndkKC3OMg/UcOIk0=</CipherValue>
  13. </CipherData>
  14. </EncryptedKey>
  15. </KeyInfo>
  16. <CipherData>
  17. <CipherValue>biMAH/6vwvi0FKvqijpSZzKhk+a6QNi0Aa794yxi1X+sffKdtsUR15hVcByOlborcKPRhX94MpOm2eKoBqYVyCf24PdYAkIFFAzO1sluzmUtcXFVU/lTBqn83bnJDgBgo6eVtDg4m7DSAVR6qWyEP8wySqWWuBkWSLzsMynqPOyGhVB9bTVJbSCWiUZ4ynFhvUTziGISJQA=</CipherValue>
  18. </CipherData>
  19. </EncryptedData>
  20. </connectionStrings>

其他备用操作:
1、解密web.config 
    aspnet_regiis -pdf "connectionStrings" "d:/testproj/websitetest"
2、把密钥容器导出为xml文件 
    aspnet_regiis -px "ConnectionStringsKey" "c:/Key.xml" 。这个命令只导出公钥,因此以后只能用于加密,而无法解密。
    aspnet_regiis -px "ConnectionStringsKey" "c:/Keys.xml" -pri  这个则连私钥一起导出了,所以我们要用这个。
3、把密钥容器删除  
   aspnet_regiis -pz "LixinKey"   删除后再运行程序,会提示出错: 
    分析器错误信息: 未能使用提供程序“LixinKeyProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。 
    同理可以证明,在任何一台未安装正确的密钥容器LixinKey的机器上,程序都无法对connectionStrings节进行解密,因此也就无 法正常运行。
4、导入key.xml文件 
     aspnet_regiis -pi "LixinKey" "c:/Keys.xml"

此时,再运行程序会发现又可以解密了。证明加密与解密机制运行正常。
最后说一下这个机制所提供的安全性保障可以运用在什么方面:
1. 对winform程序的app.config进行加密实际意义并不大,因为无论如何,客户机都可以通过运行aspnet_regiis -pdf 来对配置文件进行解密,从而暴露敏感信息。
2.

对于web.config进行加密的意义也仅限于,当web.config文件不小心泄露时,不会同时泄露敏感信息,如果恶意攻击者已经取得了在服务器上运行程序的权限,那么同app.config一样,可以很容易通过通过运行aspnet_regiis
-pdf 获取明文了。
3. 还有,通过aspnet_regiis -pa "Key" "NT AUTHORITY/NETWORK
SERVICE"控制对不同用户对密钥容器的访问权限,应该还可以进一步获取一些安全性,比如可以控制某些用户即使登录到服务器上,也无法用aspnet_regiis
-pdf对配置文件进行解密。

加密webconfig中的连接字符串,利用RSA非对称加密,利用windows保存密钥容器的更多相关文章

  1. web.config中连接字符串的读写和加密解密

    转载:https://www.cnblogs.com/shuai/articles/2248703.html 1.先来看看如何在web.config中写入数据库连接字符串.打开web.config文件 ...

  2. ASP.NET 5探险(1):Azure中配置连接字符串、独立项目执行EF7数据迁移

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:我开始把ASP.NET 5用于生产系统开发已经有1个多月了,也填了一些坑积累了一些经验,从今天开始会陆陆续 ...

  3. EF中的连接字符串

    映射视图是每个实体集和关联的映射中指定的可转换的可执行表示. 包括两部分: 查询视图 表示从数据库架构转到概念架构所需的规范装换 更新视图 表示从概念模型转到数据库架构所需的规范转换 如果应用程序仅用 ...

  4. 前端js,后台python实现RSA非对称加密

    先熟悉使用 在后台使用RSA实现秘钥生产,加密,解密; # -*- encoding:utf-8 -*- import base64 from Crypto import Random from Cr ...

  5. JSON 接口如何实现 RSA 非对称加密与签名

    代码地址如下:http://www.demodashi.com/demo/14000.html 一.概述 1. 数字签名的作用:保证数据完整性,机密性和发送方角色的不可抵赖性,加密与签字结合时,两套公 ...

  6. SSH公钥登录和RSA非对称加密

    SSH登录方式 接触过Linux服务器的同学肯定用过SSH协议登录系统,通常SSH协议都有两种登录方式:密码口令登录和公钥登陆. 一.密码口令(类似于账号密码登录) 1.客户端连接服务器,服务器把公钥 ...

  7. 前后端数据加密传输 RSA非对称加密

    任务需求:要求登陆时将密码加密之后再进行传输到后端. 经过半天查询摸索折腾,于是有了如下成果: 加密方式:RSA非对称加密.实现方式:公钥加密,私钥解密.研究进度:javascript与java端皆已 ...

  8. php RSA非对称加密 的实现

    基本概念 加密的意义 加密的意义在于数据的传输过程中,即使被第三方获取到传输的数据,第三方也不能获取到数据的具体含义. 加密方式分为对称加密和非对称加密 什么是对称加密? 对称加密只使用一个秘钥,加密 ...

  9. ssh rsa 非对称加密 基本原理

    我们常用的ssh 免密登陆是用了 非对称加密的rsa算法(最为常用),与对称加密的相比会慢一些,但是更安全.秘钥长度超过768位无法破解. 默认长度是2048位(无法破解,非常安全) ssh-keyg ...

随机推荐

  1. 旅行,说走就走 Help? [C++数据类型和表达式]

    摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 乐天派.我却喜欢和老妈说"老妈小时候喜欢羡慕别人有动力,现在看 ...

  2. Eclipse For JavaEE安装、配置、测试

    Eclipse For JavaEE安装.配置.测试(win7_64bit) 目录 1.概述 2.本文用到的工具 3.安装与配置 4.JavaSE开发测试(确保JDK已正确安装) 5.JavaEE开发 ...

  3. LeetCode算法扫题系列83

    原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104582.html LeetCode算法第83题(难度:简单) 题目:给定一个排序链表 ...

  4. MyBatis源码解析(五)——DataSource数据源模块之非池型数据源

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6675633.html 1 回顾 上一篇中我解说了数据源接口DataSource与数据源工厂 ...

  5. SHELL脚本--shell数组基础

    bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 数组和变量的区别是:变量在内存中占用的空间是离散的,数组在内存 ...

  6. 把mysql脚本或其他数据库脚本导入Powerdesigner

    打开powerdesigner,选择File --> Reverse Engineer --> Database…… Model name是模型名称,DBMS选MySQL 5.0 然后确定 ...

  7. c# 使用迭代器来创建可枚举类型

    class Program { public IEnumerator<string> GetEnumerator() { IEnumerable<string> my = Bl ...

  8. 总结下Mysql分表分库的策略及应用

    上月前面试某公司,对于mysql分表的思路,当时简要的说了下hash算法分表,以及discuz分表的思路,但是对于新增数据自增id存放的设计思想回答的不是很好(笔试+面试整个过程算是OK过了,因与个人 ...

  9. Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因

    1.Spring中的applicationContext.xml配置错误导致的异常 异常信息: org.apache.ibatis.binding.BindingException: Invalid ...

  10. Log4j的扩展RollingFileAppender、DailyRollingFileAppender

    最常用的Appender--RollingFileAppender RollingFileAppender的一个Log4j配置样例: log4j.appender.R=org.apache.log4j ...