我想知道在Java中保护TCP连接的最佳方法是什么。我希望与我的服务器的通信只来自经过身份验证的客户端,并在可能的情况下加密传输的数据。
我需要注意和覆盖哪些问题,我可以使用哪些技术?
谢谢,
添
答案 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可能是最简单的方法。您将需要使用客户端证书来允许验证连接的客户端。您有两种使用客户端证书的方法:
选择采用哪种方法完全属于您,同样安全。选择最适合您当前项目的设计。