2011-11-03 58 views
3

我們有使用「NT Authority \ Network Service」的網站。ASP.NET加密 - aspnet_regiis - 農場

Response.Write(WindowsIdentity.GetCurrent().Name); 

我們正在使用以下命令來加密配置文件。

aspnet_regiis -pc "NetFrameworkConfigurationKey" 
aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Network Service" 
aspnet_regiis.exe -pef "connectionStrings" "C:\WebAppLocation\Folder" 

注意:我們沒有使用「-exp」。當我們使用「-exp」時,它不會創建RSA密鑰容器。

正如您所看到的,我們使用的是默認鍵NetFrameworkConfigurationKey。我們的網站有一個負載平衡器。 Webserver1(W1)和WebServer2(W2)可用。

如果我遵循上面提到的命令,我們將在W1和W2上使用不同的密鑰。不過,該網站採用這種方法。

這種方法是否足夠? 它有沒有缺點或安全漏洞? 它會在任何情況下失敗嗎?

注意:機器密鑰已添加到我們的web.config中。在兩個配置中都是一樣的。但是,我們的configProtectedData不在Web.Config中。另外,我認爲,NetFrameworkConfigurationKey在兩臺服務器上都會有所不同。

我已閱讀以下msdn aricle在Web場景中的加密。你正在做 http://msdn.microsoft.com/en-us/library/ff650304.aspx

回答

0

一切都很好,而且我建議你把machinekeymachine.config而不是web.config。這個值通常不會經常改變,並且在web.configs被改變時減少意外改變的可能性。

這也可以讓你擴展未來的應用程序,而不會佔用越來越多的web.configs。

7

我不聽起來像你做了一切正確的事。首先,這裏有兩個問題:

  1. 確保machineKey在兩個Web服務器上都是相同的。
  2. 確保在兩臺服務器的密鑰容器中安裝相同的RSA私鑰,以便每臺服務器都可以解密加密的配置。

這些是單獨的問題:machineKey與加密/解密您要保護的配置節無關。

因此,首先使用aspnet_regiis -pc命令創建一個新的RSA密鑰容器,其失敗的原因是您指定的容器名稱已存在,因爲它是默認值。此容器中的密鑰對不可導出,因此您需要創建新的密鑰容器並指定-exp開關以表示密鑰對可導出。

aspnet_regiis -pc "MyDeploymentKeyContainer" -exp 

然後將密鑰導出到文件中,包括私鑰:私鑰用於解密配置部分,因此,Web服務器將需要它。

aspnet_regiis -px "MyDeploymentKeyContainer" deploykey.xml -pri 

現在將config部分添加到您的web.config並保存。

<configProtectedData> 
    <providers> 
    <add keyContainerName="MyDeploymentKeyContainer" 
      useMachineContainer="true" 
      description="Uses RsaCryptoServiceProvider to encrypt and decrypt" 
      name="DeploymentProvider" 
    type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
    </providers> 
</configProtectedData> 

然後加密的web.config部分,指定供應商名稱如上圖所示(這裏是「DeploymentProvider」)

aspnet_regiis -pef "connectionStrings" "C:\WebAppLocation\Folder" -prov "DeploymentProvider" 

現在,您需要部署應用服務器和導入RSA您以前導出到文件的密鑰容器。一旦這樣做了從服務器上刪除文件

aspnet_regiis -pi deploykey.xml 

- 你不希望它晾一下:複製文件並在每臺服務器運行。最後,將運行您的Web應用程序的應用程序池的用戶帳戶授予兩臺Web服務器上的密鑰容器。

aspnet_regiis -pa "MyDeploymentKeyContainer" SomeDomain\SomeAccount 
相關問題