2011-11-26 136 views
2

的危險這個問題似乎是一個新手,也許「笨」的問題,但請多多包涵......禁用證書驗證的Java中

我仍然在努力尋找一種方式來獲得我的Java應用程序使用位於JAR文件內的密鑰庫,我非常想試試使用the method here.來禁用證書驗證。但是,在我這樣做之前,我只想確認爲什麼你不應該這樣做,以及這些原因實際上適用於我。

我聽說沒有證書驗證可以使你的應用程序承擔「中間人」攻擊(我認爲),但即使我是正確的,但我不確定這些實際是什麼,所以請有人說明。儘管如果他們是我認爲他們可能的,我不確定我的應用程序是否會受到他們的影響,因爲我的應用程序只使用SSL連接從我的網站獲取數據,所以用戶不會告訴應用程序哪些URL參觀 - 如果是有道理的......

回答

5

這是一個攻擊場景。其他人可能想要提供更多。

您的應用程序訪問URL。在這個過程中的任何一點(任何中間網絡跳躍),攻擊者都可以將自己定位爲「中間人」,也就是說,他會僞裝成你的交流的「代理人」,能夠閱讀一切經過,甚至修改它:攻擊者可以代表用戶行事,誤導他獲取哪些信息,並基本訪問正在傳輸的數據。

輸入SSL:您的客戶端使用有效密鑰(由已知證書頒發機構簽署或存在於密鑰庫中)從服務器接收證書。然後,服務器將使用該密鑰對其發送的所有內容進行簽名和加密。如果攻擊者將自己置於中間,他將無法讀取數據(已加密)或修改(已簽名,修改會破壞簽名)。他仍然可以完全阻止通信,但這是另一回事。

這就是如果你忽略你的密鑰庫,你不能驗證任何服務器端證書,並且你打開man-in-the-middle攻擊的大門。

+0

謝謝Miguel和user384706,你們的回答都很有幫助,我現在可以得出結論,我需要密鑰存儲。如果我確實設法將密鑰庫放入JAR文件中,它是否需要更新?我只問,因爲我知道SSL證書需要更新,但我不知道是否更新它們會影響密鑰庫中的信息... – Andy

+1

@Andy:如果服務提供商的公鑰更改,您必須更新它取決於您的關鍵提供商的政策。你應該爲此做好準備......至少與供應商討論。 – home

+0

@家沒關係,但否則我不需要,是嗎? – Andy

1

不過,如果它們是什麼,我認爲他們可能是,我不知道我的 申請是否曾經受到他們,因爲,我的應用程序只 使用的SSL連接到我的網站獲得的數據,這樣用戶就不必 告訴應用程序訪問的網址 - 如果是有道理的......

如果您通過SSL連接到服務器,並且您沒有進行任何身份驗證,則實際上您沒有安全性。
您不知道與您通話的端點是誰。

用戶沒有輸入網址,但網址是到您網站的硬編碼網址是不相關的。一個簡單的代理將數據從客戶端轉發到服務器,可以竊取您所有客戶端的數據,因爲沒有任何身份驗證(這是中間人攻擊)。

我建議你把你正在使用的代碼加載密鑰庫,這樣你就可以獲得幫助。
否則,如果您對安全性沒有任何要求,並且您沒有任何敏感數據,則應該進行普通連接(即非SSL),以便您的性能不會由於不必要而惡化(在您的情況下)SSL開銷

+0

使用未經身份驗證的SSL,您可以針對被動竊聽者提供安全保護,但不會針對任何主動攻擊者(可以假裝爲其他人)提供安全保護。唉,對大多數安全通信的主要威脅是主動攻擊者(例如各種代理)。 –