2010-06-23 79 views
3

我正在研究與許多外部系統API交互的系統:s。他們大多需要某種類型的認證。爲了便於使用,有一個「應用程序範圍可訪問」AppConfig,用於存儲配置信息以及外部系統的憑證。如何在應用程序配置中管理密碼

我的問題是,如果在應用程序配置文件中存儲用戶名和密碼(以明文形式)到外部系統是一個壞主意。如果是這樣,你如何避免它?

爲了訪問配置文件,您必須破壞服務器的文件系統或其他服務器上的git存儲庫(當然還有任何開發人員的系統)。我一直認爲在配置文件中加密密碼不會提高安全級別,因爲加密密鑰也必須存儲在某個地方。我錯了嗎?

我真的很感謝答案,解釋你如何解決這個問題。

解決方案

好了,這是我的最終解決方案。我使用OpenSSL創建了一個簡單的庫來加密和解密我的敏感數據。加載配置時會從用戶那裏檢索密鑰,但存儲在文件中的生產服務器除外。它仍然不是一個最佳的解決方案,但它比我以前的「解決方案」更好。

謝謝你的回答。我會接受韋恩的答案,因爲這是最豐富的。

+0

我建議http://security.stackexchange.com/questions/15040/standards-for-encrypting-passwords-in-configuration-files是一個很好的演講的人絆倒在此線程:) – tlegutko 2016-02-02 21:33:14

回答

5

好的安全性很難。

正如布魯斯·施奈爾所說:「安全是一種折衷。」你必須決定你想要這些信息的安全程度,以及你想花費多少時間來保護這些信息。而且你絕對不想讓密碼在純文本中坐在那裏,這是一個禁忌。如果您遇到了這種情況,那麼您處於不應該進行用戶身份驗證的情況。

即使安全性很差,您仍可以執行一些操作。

1)使用某種類型的編譯程序來進行加密/解密。你不希望有人打開一個Python/Perl腳本,並說「啊哈,這只是一個簡單的XYZ加密」,儘管理想情況下你不需要簡單的加密。

2)通過默默無聞的安全性不是真正的安全性,但它可以幫助反對隨便的窺探。例如,命名文件「passwords.txt」並不是一個好主意,但是對密碼進行加密然後使用隱寫來隱藏用戶/傳入某個圖像文件會更好。

3)查找強大的加密/解密算法。其中一些已經在大多數語言中實現,你可以導入一個庫。這可能不好或不好,這取決於你認爲你想要這些東西的安全性。

但說實話,這個系統真的很糟糕 - 安全明智。理想情況下,你有一個雙方認證,然後信任的中間人完成所有的工作和處理。例如,當您登錄到計算機時,您告訴計算機您是授權用戶。從那裏你可以運行你的所有程序,他們不會問或不關心你的用戶/密碼組合 - 只是你是一個授權用戶。他們從操作系統(中間人)獲得這些信息。哎呀,即使SO使用openID來決定你是一個值得信賴的用戶 - 他們不關心你的憑據在其他網站上,只是其他網站說「是的,這是一個有效的用戶。「

如果可以選擇,我會認真考慮切換您的身份驗證模式。如果不是,祝你好運。

+0

感謝的翔實的答案。我在大多數觀點上都同意你的觀點,但仍希望看到人們如何解決這個問題的真實世界的例子。 我不認爲我的方法是非常獨特的。在Rails中,您將數據庫密碼存儲在純文本配置文件中。我所做的是相同的,只是針對數據庫以外的其他系統。 什麼,我的想法是,即使加密的用戶名和密碼是一種「透過朦朧安全」,作爲加密密鑰必須保存在某個地方爲好。 – 2010-06-23 13:27:27

+0

非常真實。當然,這也取決於用戶的信任程度,因爲某些人需要在某個時間獲取數據。我想這隻能回到Schneier的陳述。安全性是一種折衷,你只需要決定你需要多少安全。 – 2010-06-23 13:36:47

1

關於活生生的例子,網絡服務器存儲數據庫的登錄信息的服務器上,以純文本格式。如果有人可以訪問你的服務器,但是無論如何你都會被搞砸了,但是保護這些密碼免受不受歡迎的機會侵入者的侵害,我個人喜歡額外的層感覺更安全。系統時,謹慎的做法是讓其他層保護:加密。通過默默無聞的安全性是不好的,但你不認爲它是一個優秀的代理terrent if有人不得不絆倒他們 - 純文本密碼只是乞求被採取。

我建議使用1024位加密,有a couple good algorhytms。我還建議使用64/128位random salt爲用戶加密的每個條目,這樣,即使一個入口中的密碼是蠻力強行,該解決方案將不會在其他項目的工作。隨機醃製防止彩虹桌面攻擊,這迫使你的黑客使用暴力,更費時。

是這些預防措施顯得偏執,但如果我嘗試破解我自己的密碼(用於研究的興趣,當然)我可以想像一些惡意的頭腦的人可以試試。

編輯:An example of how the salt makes encryption more secure, even if the encryption key is known.

+0

感謝您的回覆。我不熟悉加密,哈希和醃製。我用它在DB中存儲用戶密碼。 – 2010-06-23 14:13:02

-1

一些webbservers需要在啓動時加載對稱加密證書。爲了解決這個問題,他們要求在啓動時輸入密碼。所以它只存儲在內存中。

優點:

  • 主密碼永遠不會存儲在磁盤上。
  • 主密碼不能從ps fax提取。

缺點:

  • 主密碼仍然可以通過存儲器轉儲被提取(通過運行webbserver和根的用戶)。
  • 你的進程不能自動無需用戶干預的情況下重新啓動。這可能是爲什麼沒有更多人選擇這個選項的最大原因。幸運的是,網絡服務器很少崩潰。
相關問題