gpt4 book ai didi

java - Java 服务器能否在一个端口上同时接受 SSL 和明文连接?

转载 作者:行者123 更新时间:2023-11-30 09:33:54 25 4
gpt4 key购买 nike

标题说明了一切。

如果我尝试将 ServerSocket 和 SSLServerSocket 绑定(bind)到同一个端口,我会收到错误消息。如果客户端尝试在没有 SSL 的情况下连接到 SSLServerSocket,则 accept() 方法会抛出错误。如果客户端尝试通过 SSL 连接到 ServerSocket,我不知道如何建立安全连接。

有可能吗?

最佳答案

您可以接受一个普通的套接字连接并在稍后阶段将其升级到 SSL/TLS,使用 SSLSocketFactory.createSocket(Socket s, String host, int port, boolean autoClose) (和服务器端的 SSLSocket.setUseClientMode(false))。

您需要在纯文本协议(protocol)中定义一个命令,以便双方可以就升级达成一致(例如类似于 SMTP 或 LDAP 中的 STARTTLS 命令)。

或者,您可以使用端口统一(如 can be done with Grizzly ),从而尝试检测客户端是否使用 SSL/TLS 客户端问候消息启动连接。这样做可能比较棘手,因为您必须提前读取以检测数据包类型(因此您可能需要保留该缓冲区并将其内容传递到 SSLEngine,而不是能够直接使用 SSLSocket)。

关于java - Java 服务器能否在一个端口上同时接受 SSL 和明文连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11985896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com