2009-02-19 38 views
3

我只是好奇,如果任何人有任何偉大的想法。安全,可移植的加密配置值 - 可能嗎?

我們有很多C#windows服務。每個應用程序都安裝在多臺機器上(根據應用程序的不同,可以從2-80開始)。

由於網絡的安全設置,我們無法(一致地)將SQL身份驗證用於SQL服務器,因此我們的連接字符串和憑證有實際的用戶名和密碼。

我們的基礎設施人員希望能夠在部署軟件時執行以下操作: 1)編輯一次配置 - 爲各種數據庫連接設置適當的服務器,用戶和密碼。 2)讓連接字符串(至少)加密或肉眼無法讀取 3)將該配置文件複製到特定軟件的所有安裝中。這意味着加密不能綁定到特定的機器上。

DPAPI能做到這一點嗎?是否可以在所有目標上安裝一組密鑰以允許解密通用配置文件?在這種情況下如何編輯配置?您如何阻止其他用戶以相同的方式查看加密配置?

回答

2

DPAPI加密使用<machineKey>作爲私鑰。

選項1)您可以在每臺服務器的machine.config中更新此設置,並將machineKey設置爲相同。這對服務器有很大的影響,例如依賴於machineKey的不相關的應用程序。

選項2)您可以覆蓋web.config中的<machineKey>以獲取更窄的範圍。

會話和加密視圖狀態驗證也取決於<machineKey>,所以通過跨服務器擁有相同的密鑰,會話和視圖狀態將是可讀的。對於具有相同服務器和集中式會話存儲的Web場來說,這可能是需要的,但這不在原始問題的範圍之內。

How To: Configure MachineKey in ASP.NET 2.0

+0

當它不是ASP.NET,但使用app.config的持久服務時,我該怎麼辦? – Joe 2009-02-19 14:58:56

+0

DPAPI不​​是特定於ASP.NET的,因此您可以在app.config中覆蓋machineKey。相同的加密/解密碼將起作用。 – spoulson 2009-02-20 13:19:20

0

我可以對您的問題的至少一個方面發表評論,因爲我們在這裏工作的地方配置了服務。

當編輯/創建配置,我們把一個特殊記號的第一個字符:

<value>:secret_password</value> 

冒號是特殊標記。當服務啓動並讀取配置時,它通過查找令牌找到所有未加密的值,對其進行加密,然後用加密值覆蓋純文本。

所以這允許文件被編輯,同時保密祕密。