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)
2、在web.config中加入如下内容<configProtectedData>
<providers>
<clear />
<add name="ConnectionStringsKeyProvider"
type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0,Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
keyContainerName="ConnectionStringsKey"
useMachineContainer="true"/>
</providers>
</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
加密前的连接字符串:
<connectionStrings>
<add name="connection" connectionString="data source=.;database=aspnetdb;user id=sa;pwd=123;" />
</connectionStrings>
加密后的连接字符串:
<connectionStrings configProtectionProvider="ConnectionStringsKeyProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>AepogG4vVhd8K6NVhVmdO8FAGFMopOdDvnBN5vPV0mxP8NgrImnZFvflrhhvooiu56McmMr6n5cUnixzimGB/zTgCNMsIkU8Sr6YtX8iUh64U9IVujwaOAbtZp4AhLhMiH6YwkHXjmqrjYyS2ecsocquZQ0ndkKC3OMg/UcOIk0=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>biMAH/6vwvi0FKvqijpSZzKhk+a6QNi0Aa794yxi1X+sffKdtsUR15hVcByOlborcKPRhX94MpOm2eKoBqYVyCf24PdYAkIFFAzO1sluzmUtcXFVU/lTBqn83bnJDgBgo6eVtDg4m7DSAVR6qWyEP8wySqWWuBkWSLzsMynqPOyGhVB9bTVJbSCWiUZ4ynFhvUTziGISJQA=</CipherValue>
</CipherData>
</EncryptedData>
</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对配置文件进行解密。
SpringBoot配置文件加密jasypt【数据库配置加密、redis配置加密、核心参数加密】
SpringBoot配置文件加密jasypt【数据库配置加密、redis配置加密、核心参数加密】
在前面的2个章节中,一一哥 带大家实现了在Spring Security中添加图形验证码校验功能,其实Spring Security的功能不仅仅是这些,还可以实现很多别的效果,比如实现自动登录,注销登录等。
有的小伙伴会问,我们为什么要实现自动登录啊?这个需求其实还是很常见的,因为对于用户来说,他可能经常需要进行登录以及退出登录,你想想,如果用户每次登录时都要输入自己的用户名和密码,是不是很烦,用户体验是不是很不好?
所以为了提高项目的用户体验,我们可以在项目中添加自动登录功能,当然也要给用户提供退出登录的功能。接下来就跟着 一一哥 来学习如何实现这些功能吧!
一. 自动登录简介
如何在容器集群环境中使用Let's Encrypt HTTPS证书
本文介绍了Let's Encrypt单域名和通配型HTTPS证书的申请与更新,以及如何在容器集群环境中自动化地实现证书更新