加密IIS站点的Web.config节点

1 准备知识

1.1 指定受保护的配置提供程序

 .NET Framework 中的受保护配置提供程序:web

这两种提供程序均可以对数据进行强加密。可是,若是计划在多台服务器(Web 场)上使用相同的加密配置文件,则只有经过RsaProtectedConfigurationProvider 才能导出加密密钥,并将其导入其余服务器。固然,也能够经过 .NET Framework,也能够自行定义受保护配置提供程序windows

1.2 导入和导出受保护的配置 RSA 密钥容器

1.2.1 建立秘钥容器

建立一个名为 SampleKeys 的 RSA 密钥容器,该容器是可导出的计算机级密钥容器。api

aspnet_regiis -pc "SampleKeys"–exp服务器

注:Aspnet_regiis.exe 工具位于 %windows%\Microsoft.NET\Framework\versionNumber 文件夹中。app

1.2.2 授予对 RSA 密钥容器的访问权限

默认状况下,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"加密

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 "/" 

相关文章
相关标签/搜索