.NET Framework 中的受保护配置提供程序:web
DpapiProtectedConfigurationProvider。使用 Windows 数据保护 API (DPAPI) 对数据进行加密和解密。算法
RsaProtectedConfigurationProvider。使用 RSA 加密算法对数据进行加密和解密。c#
这两种提供程序均可以对数据进行强加密。可是,若是计划在多台服务器(Web 场)上使用相同的加密配置文件,则只有经过RsaProtectedConfigurationProvider 才能导出加密密钥,并将其导入其余服务器。固然,也能够经过 .NET Framework,也能够自行定义受保护配置提供程序。windows
建立一个名为 SampleKeys 的 RSA 密钥容器,该容器是可导出的计算机级密钥容器。api
aspnet_regiis -pc "SampleKeys"–exp服务器
注:Aspnet_regiis.exe 工具位于 %windows%\Microsoft.NET\Framework\versionNumber 文件夹中。app
默认状况下,RSA 密钥容器受到所在服务器上的 NTFS 访问控制列表 (ACL) 的严密保护。必须首先向 ASP.NET 应用程序的进程标识授予对该 RSA 密钥容器的读取访问权限,而后 ASP.NET 才能使用 RSA 密钥容器。ide
下面的命令向 Windows Server 2003 NETWORK SERVICE 账户授予对名为 SampleKeys 的计算机级 RSA 密钥容器的读取访问权限:工具
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"加密
下面的命令将名为 SampleKeys 的计算机级 RSA 密钥容器导出到名为 keys.xml 的文件中并包括了私钥信息。
aspnet_regiis -px "SampleKeys" "c:\keys.xml" -pri
下面的命令从名为 keys.xml 的文件中导入名为 SampleKeys 的计算机级 RSA 密钥容器:
aspnet_regiis -pi "SampleKeys" "c:\keys.xml"
下面的命令删除名为 SampleKeys 的计算机级 RSA 密钥容器。
aspnet_regiis -pi "SampleKeys" "c:\keys.xml"
2.1 发布站点到IIS服务器。这里部署名为ebuy的站点。
2.2 授予对 RSA 加密密钥的读取权限。其中,经过System.Security.Principal.WindowsIdentity.GetCurrent().Name能够获取当前的登陆用户。
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
或
aspnet_regiis -pa "SampleKeys" "IIS APPPOOL\AppPoolName"。
2.3 web.config中增长受保护配置提供程序节点。
<configProtectedData defaultProvider="SampleProvider"> <providers> <add name="SampleProvider" type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" keyContainerName="SampleKeys" useMachineContainer="true" /> </providers> </configProtectedData>
2.4 加密指定配置节点。
下面的命令将使用SampleProvider受保护配置提供程序为站点ebuy的web.config中的connectionStrings节点加密。
aspnet_regiis -pe "connectionStrings" -site "ebuy" -app "/" -prov "SampleProvider"
加密后connectionStrings节点内容以下:
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <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>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo= </CipherValue> </CipherData> </EncryptedKey> </KeyInfo> <CipherData> <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE= </CipherValue> </CipherData> </EncryptedData> </connectionStrings>
2.5 后续
下面的命令将使用SampleProvider受保护配置提供程序为站点ebuy的web.config中的connectionStrings节点解密。
aspnet_regiis -pd "connectionStrings" -site "ebuy" -app "/"