2013-05-10 169 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