• 解决打不开 RSA 密钥容器 即:加密web.config中的内容


    Google到这篇文章不难,但大都是转载的。感谢文章的原创者。
    本人不才,不知道http://zhangxiaoyu0312.blog.sohu.com/71633822.html是不是原创
    简单的解决方法:

    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中加入如下内容

     

    Code

     


    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

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


    其他备用操作:
    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对配置文件进行解密。
  • 相关阅读:
    ivew-admin 导入excel
    ivew Upload 上传时附带的额外参数
    工厂方法模式
    简单工厂模式
    webpack (1)
    商品格子
    合同签名
    展示图片数组
    使用egg.js和egg-sequelize连接mysql
    egg 连接mysql 在mysql 插入数据
  • 原文地址:https://www.cnblogs.com/xryyforver/p/1537641.html
Copyright © 2020-2023  润新知