2016-01-05 28 views
-2

我有服務器和客戶端應用程序通過作爲桌面應用程序的TCP套接字進行通信。我在服務器和客戶端機器之間啓用了Windows IP-sec,這樣我的網絡流量就會被加密。在登錄過程中,客戶端應用程序將密碼散列發送給服務器,服務器在應用服務器端散列之後在數據庫中驗證它是否正確。 現在還有另一種情況,客戶端應用程序通過TCP和服務器從服務器請求SQL服務器密碼以純文本形式發送此密碼,然後客戶端應用程序使用此密碼與SQL服務器連接,與連接其他第三方服務器的客戶端應用程序從服務器獲取密碼,服務器通過Ipsec將其發送爲純文本。我的問題是,這是否安全地通過啓用ipsec的服務器和客戶端發送密碼?如果不是,我還需要做些什麼才能保證安全?通過支持Ipsec的服務器和客戶端以純文本方式傳遞登錄憑證是否安全

回答

0

IP-sec提供了加密功能,因此在IP-sec連接中以純文本形式發送密碼在理論上是安全的。

但是,如果可能的話,最好不要發送純文本密碼。

想到的方法是使用SSH密鑰。客戶端會生成密鑰對並將公鑰發送給服務器,服務器會將其轉發給SQL /第三方服務器。在這種情況下,私鑰永遠不必離開客戶端。這很難建立,但從長遠來看應該更安全。 PS:還記得,如果攻擊者有權訪問客戶機(直接或通過計算機上的惡意軟件),則可以從客戶機應用程序中提取密碼/密鑰。因此,始終假定用戶身份驗證爲客戶端將有權訪問這些密鑰,並且將能夠執行所有這些密鑰可用於執行的操作,即使您的客戶端不允許它。

+0

是的,這是有道理的。而不是使用SSH密鑰。服務器啓動時會有RSA密鑰對並將公鑰發送給客戶端,客戶端會生成AES隨機密鑰並使用服務器公鑰對其進行加密,然後在客戶端應用程序需要時使用該密鑰對網絡上的SQL密碼進行加密和解密。就像TLS握手一樣。這有意義嗎? –

+0

如果你不想/不能擺脫SQL密碼,那麼它是有道理的。 只有一個細節:使用密鑰協商代替服務器只是組成加密密鑰可能會更好,例如Diffie Hellman https://wiki.openssl.org/index.php/Diffie_Hellman – xhunterx

相關問題