2010-10-30 71 views
0

我創建了一個應用程序,需要app.config中的2個連接字符串和一些appSettings加密。加密的app.config在部署的機器上失敗

我救了我的app.config爲web.config文件並運行asp.net兩個「的ConnectionStrings」和「的appSettings」

加密的作品,我可以在我的本地開發框運行ASPNET_REGIIS -pe命令然而,當我嘗試在新機器上移動它時,它會失敗。

在我的應用程序中使用加密設置需要做些額外的步驟嗎?

回答

1

aspnet_regiis -pe使用數據保護API(又名DPAPI)存儲加密密鑰,該數據保護API是機器特有的。默認情況下,它將加密密鑰存儲在機器存儲中而不是用戶存儲中。 (例如,您不需要運行aspnet_regiis作爲將運行Web應用程序的用戶,只能在同一個框中運行)。您需要在目標框上運行該命令,以便加密密鑰正確存儲在DPAPI中。你可以在這裏找到更多的信息:

http://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

如果你要在Web場方案在運行,你可能想使用在所有的機器相同的加密配置部分。因此,您需要跨機器共享加密密鑰。上面的同一篇文章鏈接到RsaProtectedConfigurationProvider和跨機器共享密鑰的信息。

3

您需要在目標計算機上運行aspnet_regiis -pe命令來加密配置文件。該應用程序在本地計算機上運行,​​因爲您在該計算機上運行了該命令。

+0

如果我沒有訪問客戶機,該怎麼辦?我已經構建了一個應用程序並將其打包。我希望最終用戶能夠自己運行設置。 – 2010-10-30 20:58:40

+0

您需要獲取服務器密鑰。看看[這篇文章](http://msdn.microsoft.com/en-us/library/ms998283.aspx#paght000006_webfarmscenarios)。 – 2010-10-30 21:00:48

+0

對於將RSA密鑰導出/導入其他機器的問題,我仍然感到困惑,因爲這樣做不允許用戶自己使用解密命令? – Sawd 2017-07-06 18:42:41

0

我們在環境中執行此操作的方式是在MSI中清除配置(它是標記化的,只在安裝時完全寫入),然後我們執行「aspnet_regiis -pe」活動的自定義操作(通過框架完成,但不使用命令行)。

如果您無法訪問最終機器,那麼您將無法進行有效加密,您最終總會泄露私鑰以解密字符串 - 然後您只是在做通過默默無聞的安全,這是行不通的。

+0

好,所以我理解正確。 (在我的情況下,我正在使用installsheild)我會打包應用程序沒有任何加密,在安裝過程中,我會創建一個自定義操作,調用「aspnet_regiis -pe」?是對的嗎? – 2010-10-30 21:29:41

+0

是的,除了我不會掏出並調用aspnet_regiis,看看這個http://stackoverflow.com/questions/21965/programmatically-encrypting-a-config-file-in-net這將有助於做到這一點通過框架api。 – 2010-10-30 21:37:47