1 准备知识
1.1 指定受保护的配置提供程序
.NET Framework 中的受保护配置提供程序:
-
DpapiProtectedConfigurationProvider。使用 Windows 数据保护 API (DPAPI) 对数据进行加密和解密。
-
RsaProtectedConfigurationProvider。使用 RSA 加密算法对数据进行加密和解密。
这两种提供程序都可以对数据进行强加密。但是,如果计划在多台服务器(Web 场)上使用相同的加密配置文件,则只有通过RsaProtectedConfigurationProvider 才能导出加密密钥,并将其导入其他服务器。当然,也可以通过 .NET Framework,也可以自行定义受保护配置提供程序。
1.2 导入和导出受保护的配置 RSA 密钥容器
1.2.1 创建秘钥容器
创建一个名为 SampleKeys 的 RSA 密钥容器,该容器是可导出的计算机级密钥容器。
aspnet_regiis -pc "SampleKeys"–exp
注:Aspnet_regiis.exe 工具位于 %windows%\Microsoft.NET\Framework\versionNumber 文件夹中。
1.2.2 授予对 RSA 密钥容器的访问权限
默认情况下,RSA 密钥容器受到所在服务器上的 NTFS 访问控制列表 (ACL) 的严密保护。必须首先向 ASP.NET 应用程序的进程标识授予对该 RSA 密钥容器的读取访问权限,然后 ASP.NET 才能使用 RSA 密钥容器。
下面的命令向 Windows Server 2003 NETWORK SERVICE 帐户授予对名为 SampleKeys 的计算机级 RSA 密钥容器的读取访问权限:
aspnet_regiis -pa "SampleKeys" "NT AUTHORITY\NETWORK SERVICE"
1.2.3 导出 RSA 密钥容器
下面的命令将名为 SampleKeys 的计算机级 RSA 密钥容器导出到名为 keys.xml 的文件中并包括了私钥信息。
aspnet_regiis -px "SampleKeys" "c:\keys.xml" -pri
1.2.4 导入 RSA 密钥容器
下面的命令从名为 keys.xml 的文件中导入名为 SampleKeys 的计算机级 RSA 密钥容器:
aspnet_regiis -pi "SampleKeys" "c:\keys.xml"
1.2.5 删除 RSA 密钥容器
下面的命令删除名为 SampleKeys 的计算机级 RSA 密钥容器。
aspnet_regiis -pi "SampleKeys" "c:\keys.xml"
2 加密和解密配置节点
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 "/"
来源:oschina
链接:https://my.oschina.net/u/2425669/blog/735257