Java中的安全TCP连接

时间:2011-07-01 20:47:57

标签: java security authentication tcp

我想知道在Java中保护TCP连接的最佳方法是什么。我希望与我的服务器的通信只来自经过身份验证的客户端,并在可能的情况下加密传输的数据。

我需要注意和覆盖哪些问题,我可以使用哪些技术?

谢谢,

4 个答案:

答案 0 :(得分:3)

Java提供了一个安全的套接字扩展,即支持SSLv3和TLS的JSSE 它的设计使您的代码类似于处理普通套接字 您只需初始化SSLContext并将其配置为使用要使用的证书和各种参数,例如:客户端身份验证,握手侦听器等,其余部分透明处理 阅读教程以开始它。

答案 1 :(得分:2)

正如已经说过的那样,通常的方式是SSL。默认情况下,这支持(强制性)服务器身份验证和加密,客户端身份验证是可选的(例如,取决于配置 - 服务器可以确保客户端经过身份验证)。

在Java中,您可以使用SSLSocket(和SSLServerSocket)(或相应的工厂类)或SSLEngine(如果您想要执行非阻塞IO)。或者是一些在封面下使用它的更高级别的API。

另一种选择是 SSH 协议。这允许加密和(通常)双方认证连接,通过该连接可以路由多个通道。这通常用于远程命令执行或文件传输,但也允许端口转发。

在Java中,这将实现(在客户端),例如JSch。我知道没有服务器端Java实现 - 但您可以使用普通的OpenSSH服务器并将端口转发到Java服务器进程。

答案 2 :(得分:0)

SSL非常受支持(它在HTTPS中使用)。它基于公钥基础设施,提供各种加密和认证方案。

答案 3 :(得分:0)

你需要问问自己你在防范什么。如果您只想允许可信客户端,则需要定义如何确定它。如果您允许完全明文流量,这是不安全的,因为任何中间人都可以修改流量。至少您需要对要交换的数据进行完整性保护。

我同意大多数人的看法,SSL可能是最简单的方法。您将需要使用客户端证书来允许验证连接的客户端。您有两种使用客户端证书的方法:

  • 为每个客户创建自签名证书,然后保留证书哈希 - >客户端映射的数据库并在验证客户端证书时查询数据库
  • 或者,创建您自己的根CA证书并向每个客户端颁发证书,然后您需要在进行客户端证书验证时验证客户端证书是否已正确链接到根CA证书

选择采用哪种方法完全属于您,同样安全。选择最适合您当前项目的设计。