2013-05-10 130 views
0

首先,我已經搜索瞭如何保護網絡流量,我發現了很多答案......只是問題是我發現了太多的例子和方法,其中大多數很老(> 10年),所以它讓我擔心一點。Java保護網絡流量

我想知道的是我如何加密服務器和客戶端之間的網絡流量。

我有一個關於它的學士學位課程,而且從我的理解,我需要一個私人 - 公共密鑰對來加密和解密。然而,我可能錯過了一些重要的概念,因爲我目前有這樣一個問題:當密鑰是您需要保護網絡的密鑰時,如何通過網絡發送密鑰?我甚至不得不處理它,或者是否有內置的Java安全網絡應用程序?

我在課堂上也看到的是,教師需要手動驗證一些關鍵代碼,以便100%確定某人正在發送消息(手動查看別人的屏幕並比較密鑰以查看是否他們確實是一樣的)。

我目前使用套接字,我甚至不確定網絡甚至可以在Java中以不同的方式完成。我想知道我如何實現安全的網絡連接。

任何指向相關材料的鏈接都會受到讚賞,最好我想知道最好的解決方案,如果碰巧有。如果鏈接/文章有日期,那麼請證明它仍然可以在5年或10年後使用。

問候。

+2

如果你正在構建一個Web服務,只需將其部署到一些容器(Tomcat的,碼頭等),並配置爲使用SSL證書。 – David 2013-05-10 16:56:19

+0

標準實現被稱爲[Diffie-Hellman密鑰交換](http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange) - 這就是SSL的工作原理。這裏有成千上萬的實現 - 大多數(所有?)Web服務器支持開箱即用的基於證書的身份驗證。 – 2013-05-10 16:56:23

+0

對不起,我不清楚,我正在使用獨立的清潔,而不是一個Web服務。 – skiwi 2013-05-10 17:29:38

回答

3

使用Transport Layer Security(例如OpenSSL庫)。

如果你想推出自己的安全,然後使用AES加密數據; Java具有內置的支持或AES,否則您可以使用Bouncycastle庫。然後使用RSA加密AES密鑰,並將加密密鑰和AES加密數據從服務器發送到客戶端;客戶端解密密鑰,然後使用密鑰解密AES加密的數據。

Java AES TutorialJava RSA Tutorial

+0

您仍然通過網絡發送RSA加密的AES密鑰,對吧?攻擊者不能自己解密AES密鑰嗎?還是全部安全?換句話說:爲什麼**可以**客戶端解密AES密鑰,但攻擊者不是? – skiwi 2013-05-10 18:41:57

+1

@skiwi由於RSA是一個公鑰(或不對稱)加密系統,與AES是一個私鑰(或祕密密鑰或對稱)密碼系統相對; RSA和其他公鑰密碼系統專門用於在不安全的網絡上安全發送數據。 [public-key cryptography](http://en.wikipedia.org/wiki/Public-key_cryptography)上的Wikipedia頁面可以比我更好地解釋它。 – 2013-05-10 18:46:36

+1

@skiwi請注意,公鑰密碼術比祕密密鑰密碼術計算量更大,並且有時對可以加密的數據大小也有限制 - 這就是爲什麼您同時使用公鑰和祕密密鑰密碼學發送消息,而不是僅使用公鑰密碼術。 – 2013-05-10 18:51:08