当前位置: 首页 > 面试题库 >

Java服务器可以在一个端口上同时接受SSL和纯文本连接吗?

喻高寒
2023-03-14
问题内容

标题说了。

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

可能吗?


问题答案:

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

您需要在纯文本协议中定义一个命令,以便双方都可以同意正在进行的升级(例如,类似于STARTTLSSMTP或LDAP中的命令)。

或者,您可以使用端口统一(可以通过Grizzly完成),从而尝试检测客户端是否通过SSL /
TLS客户端问候消息发起连接。这样做可能会比较棘手,因为您必须提前阅读以检测数据包类型(因此,您可能需要保留该缓冲区并将其内容传递给SSLEngine,而不是SSLSocket直接使用它)。



 类似资料:
  • 我知道在Netty4中,一旦建立了一个通道,该通道的所有事件处理都在分配给特定EventLoop的同一个线程上完成。此绑定在通道创建时完成。 我不明白的部分是,实际需要多少线程来接受新连接、创建新通道和进行绑定?

  • 我最近开始尝试使用JavaSockets类在服务器和客户机之间创建双向连接。当我使用客户机套接字地址作为但是当我在 客户端套接字显示连接是通过测试返回true。 然而,在服务器端,代码似乎并没有向前推进 我应该提供代码还是问题明确? 编辑:更多信息。无论我的防火墙处于什么状态,使用外部ip地址从我自己的电脑上远程登录都是有效的。当防火墙打开时,java客户端代码不起作用,抛出 当防火墙关闭时,使用

  • 我刚刚开始使用Sockets,对于我当前的项目,我需要能够从客户端控制我的程序,但是如果我的项目合作伙伴想同时使用他的客户端,服务器不会向他发送“您已连接”消息,如连接类所示。所以我假设服务器不同时接受多个客户端。我尝试过使用类Connection的Thread,但这也不会向第二个客户端发送消息“您已连接”。我在这里做错了什么? 这是我用来同时连接多个用户的线程: 编辑:附加信息 在第一个客户端连

  • 这就是第一台服务器的样子: 这是第二台服务器的样子: 第一台服务器运行良好,但当我试图运行第二台服务器时,我会得到follwing错误,这意味着到第一台服务器的连接失败。如果有人能帮助我,我会很高兴的!

  • 问题内容: 当使用Socket类时,它正在某个端口上建立与服务器的TCP连接,但是ServerSocket能够在服务器上为每个接受请求处理多个客户端连接,并将其委托给线程来处理该请求。但是ServerSocket类如何在同一个端口上接受多个tcp连接。 这是否意味着要由操作系统来决定它允许多少个连接,或者允许的最大积压量是多少,并且可以由OS之上的应用程序控制(我的意思是Java受OS支持的最大积

  • (这个问题可能被问了一千遍,但我没有弄清楚。) 假设我有以下代码段: 现在,我可以使用相同的地址和端口来接受传入连接和连接到地址吗?如果可以的话,怎么办?如果没有,为什么不呢?根据这篇文章,端口可以共享,所以这应该不是问题。 它是如何工作的?