RsaProtectedConfigurationProvider加密命令失效,提示找不到指定保护提供者
咱们一步步来定位这个问题,这是ASP.NET配置加密里很常见的坑,先从最容易忽略的点开始查:
检查配置中provider的
name属性是否存在且匹配
你给出的配置片段里,<add>标签缺少了关键的name属性!命令里的-prov MyEncryptionProvider必须和配置中provider的name值完全一致(包括大小写、空格)。比如你的配置应该补全成这样:<add name="MyEncryptionProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" keyContainerName="MyCustomKeys" useMachineContainer="true" description="Uses RsaCryptoServiceProvider with machine-level keys"/>另外注意错误提示里的
'MyEncryptionProvider '末尾带了空格,检查你输入命令时是不是不小心多打了空格,必须保证命令里的参数和配置的name完全一致。确认provider的
type属性配置正确
你的配置里description截断了,RSA加密提供者的完整type必须正确指定,这是系统识别提供者类型的关键。上面的示例里已经给出了.NET Framework 4.x的标准type值,根据你的项目.NET版本调整对应的版本号即可。确保使用对应版本的aspnet_regiis.exe
如果你的项目基于.NET Framework 4.x,一定要用C:\Windows\Microsoft.NET\Framework\v4.0.30319(或Framework64目录下的64位版本)里的aspnet_regiis.exe,不同版本的工具对配置的解析逻辑有差异,用错版本也会导致找不到提供者。验证配置节的结构正确性
确保<configProtectedData>是直接嵌套在<configuration>根节点下的,不能被其他配置节嵌套,否则系统无法正确读取提供者配置。完整的结构应该和上面的示例一致。检查自定义密钥容器是否存在(可选)
如果你用了自定义的keyContainerName="MyCustomKeys",需要先确认这个密钥容器已经创建:- 打开管理员权限的命令提示符,执行:
aspnet_regiis.exe -pc "MyCustomKeys" -exp(-exp允许导出密钥,按需选择) - 给应用池的运行账户授权访问该容器,比如:
aspnet_regiis.exe -pa "MyCustomKeys" "NT AUTHORITY\NETWORK SERVICE"(根据你的应用池实际身份调整账户名)
- 打开管理员权限的命令提示符,执行:
先从补全配置的name属性和检查命令拼写开始,这是最常见的解决点,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Arun

