程序开发 > C# > 正文

未能打开 RSA 密钥容器(System.Security.Cryptography.Utils.CreateProvHandle)

亮术网 2020-08-15 本网原创

Asp.net 开发的网站,Web.config 中的信息(特别是连接数据库的字符串)都是明文,很容易暴露数据库名、登录用户名和密码,所以都要对敏感信息进行加密。.Net 提供 RSA 加密,使用它可以完成对 Web.config 的加密。

加密 Web.config 后是安全了,但也容易出问题。例如,RSA 加密只有在本机才能解密,网站迁移后就不能再解密,除非导出密钥并导入到迁入的服务器;还有一个常常出现的问题:未能打开 RSA 密钥容器(System.Security.Cryptography.Utils.CreateProvHandle),对于这个问题,有时设置一个文件夹权限就解决了,有时却不行,解决起来还有点麻烦。

 

未能打开 RSA 密钥容器(System.Security.Cryptography.Utils.CreateProvHandle)解决办法

1、这个问题大多是没有对文件夹 MachineKeys 的读写权限造成的,所以只把“读取、写入”权限分配给它,问题就可以解决,步骤如下:

A、打开 C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA 文件夹,右键 MachineKeys 文件夹选择“属性”,如图1所示: 

未能打开 RSA 密钥容器

图1

 

B、在打开的“MachineKeys 属性”窗口中, 选择“安全”选项卡,如图2所示:

 System.Security.Cryptography.Utils.CreateProvHandle错误

图2

C、Windows 2008 以上系统单击“编辑”(Windows 2003 就不用了),打开权限窗口如图3所示:

RSA 密钥容器MachineKeys读写权限

图3

D、Windows 2008 以上系统添加 IIS_IUSRS 用户,Windows 2003 添加 IIS_WPG 用户,分配“修改、读取”权限给它;一般来说,生成密钥的时候(加密的时候)给“修改”权限,解密的时候只需要“读取”权限。

添加 IIS_IUSRS(IIS_WPG)用户方法:

单击图3中的“添加” → 高级 → 立即查找 → 双击“搜索结果”中的 IIS_IUSRS(IIS_WPG)用户 → 确定。

 

 

2、如果给 MachineKeys 文件夹添加“修改”权限还不行,可以在 IIS 的应用程序池中把“预定义用户”改“本地系统”(注:要降低安全性),步骤如下:

Windows server 2003:

“开始”菜单 → 管理工具 → Internet 信息服务 → 展开“Internet 信息服务”下面的“应用程序池” → 右键“应用程序池(如DefaultAppPool)” → 属性 → “标识”选项卡 → “预定义用户”选择“本地系统”如图4所示:

IIS预定义用户,本地系统

图4

 

Windows server 2008 及以上系统:

“开始”菜单 → Windows 管理工具 → Internet 信息服务 (IIS)管理 → 展开“你电脑名称”下面的“应用程序池” → 右键“应用程序池(如 DefaultAppPool)” → 设置应用程序池默认设置 → 选中“标识”,单击它右边的按钮 → 选择“内置帐户”下的 LocalSystem,如图5所示:

Windows server 2008 及以上系统,IIS LocalSystem

图5