2012-07-24 114 views
1

我正在開發CMDB應用程序,我必須存儲我們的安全證書(服務器用戶名&密碼,...)。如何將安全憑證存儲在數據庫中

我正在尋找最好的方式將它們安全地與這些約束存儲:

  • 大多數用戶將無法訪問到所有憑證(取決於用戶角色)
  • 我們不希望所有密碼使用相同的密鑰進行加密(已經嘗試過:當用戶離開公司時,改變密鑰是一種痛苦......)
  • 事實上,我們不希望任何私鑰被硬編寫在應用程序源代碼中,或者甚至存儲在任何地方(在我們以前的版本中,私鑰存儲在我們的耳朵之間......)
  • 我們需要實現密碼強度審計(即。從腳本中解析解密的密碼)
  • 不能有任何情況,我們不能再訪問我們的憑證(丟失密鑰,...)=>我們不希望未經授權的人看他們,但我們不想要將它們鬆開=>解決此約束可能會正常導出到物理更衣室...

我不是在詢問應用程序(https,...)或數據庫(沒有公共訪問權限,。 ..)安全關心他們自己,但只涉及存儲方面(甚至可能不在數據庫中......?加密文件或其他...):是否有可能阻止某人,甚至可以訪問應用程序代碼或數據庫內容(最壞的情況),能夠讀取解密的憑據?

我知道,我問了一些神奇的解決方案,但我想知道,如果它的存在; O)

+1

如果您的系統整體存在明顯的安全漏洞,則憑證管理系統毫無價值。 – rook 2012-07-24 17:45:44

+1

簡單:用戶使用*自己的*密碼登錄並根據ACL獲取訪問權限。 – 2012-07-24 18:30:53

+0

@tc。當然,他們會(使用LDAP認證),但正如我所說的,我不要求應用程序方面的安全性,但存儲方面。 – 2012-07-24 19:35:15

回答

2

你問做什麼的一般情況下是不可能的。所有類型的現代密碼學都是mechanical advantage。也就是說,他們用一個小祕密來保護更大的祕密。如果你不能保證小祕密的安全,那就沒有安全感。如果您希望能夠以密碼爲基礎向某人提供密碼的密碼,則您實際上會向他們提供他們需要訪問相關物品的祕密 - 密碼。

這就是聯合身份系統(Kerberos/Active Directory/etc)系統存在的原因 - 允許中央機器在不向所述用戶泄露祕密的情況下對用戶進行身份驗證。但是使用聯合身份系統需要待登錄系統與身份服務之間的合作。

+0

非常好的推理來自你和鏈接的文章。當然,安全永遠不可能是完全的,但它必須是每一層中最好的(我不會將證書存儲到電子表格中,因爲安全性不可能是完全的!)。這讓我感到很舒服,我認爲一個好的解決方案可以保持'不成文'的獨特關鍵原則,但只與少數人共享,需要在每次應用程序重新啓動時設置關鍵(並解決如何在線程之間共享密鑰......) 。密鑰僅存在於線程內存中。要查看密鑰,您必須更改代碼,涉及應用程序重新啓動,涉及丟失密鑰。 – 2012-07-25 07:51:41

+0

@GauthierDelacroix爲了看看關鍵,你只需要附加一個調試器/轉儲內存。如果這太難了,你可以用泄露密鑰並假裝應用程序崩潰的二進制代碼來替換。 – 2012-07-25 12:08:46

+0

@tc。是的,記憶可以被拋棄,但我不會去那麼遠。未加密的憑證也將駐留在內存中。你不能完全保護你需要顯示的東西......即便如此,我認爲從文件和內存中提取密鑰之間存在差距...... – 2012-07-25 12:23:03

相關問題