2012-06-26 64 views
0

我正在構建一個Java Swing前端訪問postgres數據庫的系統。在本週發現Jasypt之前,我原本計劃使用Postgres自己的加密機制。它運行良好,但我現在也希望加密網絡上的密碼,因此我轉向Jasypt。Java Swing應用程序和Postgres數據庫之間的密碼加密

問題是,我需要一個固定密碼才能進入我的Postgres存儲功能。即如果輸入的密碼是'aaa',則任何其他輸入Postgres存儲功能(不包括'aaa')的輸入密碼將不匹配。

有沒有辦法讓這兩種加密機制一起工作,或者我必須轉儲Postgres的?

我的用戶表:

CREATE TABLE "user" 
(
    id serial NOT NULL, 
    cryptpwd text NOT NULL, 
    md5pwd text NOT NULL, 
    ... 
) 

加密密碼:

cryptedPassword = crypt(passwordIn, gen_salt('md5')); 
md5Password = md5(passwordIn); 
INSERT INTO "user"(username, cryptpwd, md5pwd, ...) 
     VALUES (usernameIn, cryptedPassword, md5Password, ...); 

解密密碼:

select ..... from "user" .... where username = usernameIn and cryptpwd = crypt(passwordIn, cryptpwd); 

如果我不能讓他們兩個一起工作,然後我會轉儲Postgres的機制,因爲我需要通過網絡進行加密。 (關於數據庫連接字符串和數據庫用戶名和密碼(不使用任何框架...希望用SSL的普通舊jdbc連接 - 尚未實現),我不認爲我能夠使用Jasypt是因爲我需要在數據庫級別解密它。單是SSL就足以滿足這種情況了嗎?

謝謝。

回答

0

我認爲SSL在每一條路上都是足夠的。在LedgerSMB(儘管我們是基於Perl的),我們做了一些不同的事情,並依賴於服務器之間以及服務器和客戶端之間的SSL保護鏈接。儘管你的方法有幾點需要考慮。

實際上,我們通過SSL連接將db用戶名和密碼從客戶端以可重用格式(純文本)傳遞給中間件,然後使用另一個SSL連接登錄到PostgreSQL以通過此方式進行身份驗證。這工作正常,但我們面臨的問題領域有點類似於你會遇到的問題領域。這些包括:

  1. 記錄。密碼是否會被意外記錄?這是LedgerSMB關注的問題,我們會採取我們可以採取的措施,但配置錯誤的服務器或篡改程序可能會記錄用戶名和密碼。在我們的例子中,這主要是在中間件級別上,但在你的情況下,查詢日誌也可以這樣做,對吧?

  2. 是否有可能憑證可以無意中重複使用?我們通過幾種方式來防止這種情況,但值得考慮。

總的來說,我們信任SSL。除此之外,增加額外的加密功能並沒有太多的收穫,並且密鑰管理增加了許多不值得IMO邊際收益的複雜性。

相關問題