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

Java服务器能否在一个端口上同时接受SSL和明文连接?,java,ssl,port,Java,Ssl,Port,标题说明了这一点 如果尝试将ServerSocket和SSLServerSocket绑定到同一端口,则会出现错误。如果客户端尝试在没有SSL的情况下连接到SSLServerSocket,则accept()方法将抛出错误。如果客户机试图通过SSL连接到ServerSocket,我不知道如何建立安全连接 甚至可能吗?您可以接受正常的套接字连接,并在稍后阶段使用(和服务器端的SSLSocket.setUseClientMode(false)将其升级到SSL/TLS) 您需要在明文协议中定义一个命令,以

标题说明了这一点

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


甚至可能吗?

您可以接受正常的套接字连接,并在稍后阶段使用(和服务器端的
SSLSocket.setUseClientMode(false)
将其升级到SSL/TLS)

您需要在明文协议中定义一个命令,以便双方能够就正在进行的升级达成一致(例如,类似于SMTP或LDAP中的
STARTTLS
命令)


或者,您可以使用端口统一(按原样),从而尝试检测客户机是否使用SSL/TLS客户机Hello消息启动连接。这可能更为棘手,因为您必须提前阅读以检测数据包类型(因此您可能需要保留该缓冲区并将其内容传递到
SSLEngine
,而不是直接使用
SSLSocket
)。

或者使用PushbackInputStream来窥探SSL客户端hello。