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

相關文章
相關標籤/搜索