2010-05-20 134 views
6

我正在學習如何加密C#(3.5)應用程序的ConnectionString。我閱讀了關於保護連接字符串的.Net Framwork開發者指南(http://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx)。但不完全理解內容。C#連接字符串加密問題

  1. 它說:「The connection string can only be decrypted on the computer on which it was encrypted."我們有一個版本的機器,這將建立我們的應用程序,它會產生OurApp.exe.config,然後將其安裝到許多產品的機器。那是MEAM我們必須有這種加密過程中分離與我們的應用,並在個別產品整機運行呢?

  2. 我們可以使用「RSAProtectedConfigurationProvider」。它提到我們需要encryption key爲供應商。當我們應該如何提供加密密鑰?

謝謝,

回答

1
  1. 配置使用機器密鑰加密。這意味着只有具有該密鑰的計算機才能對其進行解密。最簡單的方法是在配置未加密的情況下部署它,然後在軟件運行時對其進行加密,或使用單獨的進程對配置進行加密。您可以通過使用code4life的回答以上

  2. 而不是抄寫一步的如何使用RSA加密密鑰一步分發用於在其他機器上使用原來的machineKey,請參閱本MSDN指南 - http://msdn.microsoft.com/en-us/library/dtkwfdky.aspx

3

您只需運行一次加密過程。但是,在生成計算機密鑰後,需要將其傳播到目標計算機中的所有machine.config文件中。在Machine.config應設在這裏:

%FRAMEWORKDIR%\%FRAMEWORKVERSION%\CONFIG

How To: Configure MachineKey in ASP.NET 2.0 :此鏈接對配置的配置重點<machineKey validationKey="[generated value here]"
decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="Auto" />
以及如何機器之間分享這一段。

2

1)是的,如果你使用這種方法,你可以對它安裝的每臺機器進行加密。如果你每臺機器都有不同的配置,這將是我exp的正常方法。如果您嘗試發送「祕密」連接字符串,這不是一個好方法。

2)如果你還沒有看到它,這個文章,我認爲將回答有關RSA提供者的問題...... http://msdn.microsoft.com/en-us/library/ff650304.aspx

如果這是你需要提供連接信息給客戶使用的應用程序那麼:

警告注意:不要認爲通過加密配置,您確實可以保護自己免受運行該應用程序的用戶的影響。在某些時候,該字符串需要被應用程序解密以用於連接到服務器。該應用程序可以被用來提供與其他應用程序的連接。簡而言之,你不應該依賴這一點作爲讓用戶脫離數據庫的唯一策略。良好的安全始終是一個多方面的努力。

2

有兩種方法可以確保鑰匙的安全(實際上是一種,但是在開始使用工具時,它們朝不同的方向前進)。

  1. 使用DPAPI和機器的實際密鑰。這在某種程度上更安全​​,因爲沒人知道鑰匙。導出密鑰也很痛苦,所以你可以把它放在農場的其他機器上。唯一的解決方法是必須爲場中的每個服務器維護單獨的連接字符串。這可以完成,但它非常笨拙。如果你走這條路線,從配置文件中分離出連接字符串,這樣你仍然可以在所有服務器上更新配置,但不會連接字符串。想想吧,無論如何,這是個好主意。
  2. 設置一個定製的機器密鑰(谷歌,因爲那裏有發電機可以創建密鑰),然後在配置文件中提供。您可以輕鬆共享密鑰。

希望這會有所幫助。