栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

是否可以将普通套接字更改为SSLSocket?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

是否可以将普通套接字更改为SSLSocket?

是否可以将普通套接字更改为SSLSocket?

是的。在服务器端,以下工作:

ServerSocketFactory ssf = ServerSocketFactory.getDefault();ServerSocket serverSocket = ssf.createServerSocket(12345);// I've initialised an sslContext with a keystore, as you normally would.Socket socket = serverSocket.accept();SSLSocketFactory sslSf = sslContext.getSocketFactory();// The host name doesn't really matter, since we're turning it into a server socket// (No need to match the host name to the certificate on this side).SSLSocket sslSocket = (SSLSocket) sslSf.createSocket(socket, null,    socket.getPort(), false);sslSocket.setUseClientMode(false);// Use the sslSocket InputStream/OutputStream as usual.

SSLSocketFactory.createSocket(Socket, ...)
默认情况下会将现有的
Socket
转换为client-mode
SSLSocket
。由于握手仅在您开始使用I /
O流进行读/写时才开始,因此仍然是使用更改模式的时候
setUseClientMode(false)


关于其余的问题:

我想知道的是,有可能:

  • 如果客户端发送http请求,则服务器将直接处理该请求,
  • 如果客户端发送https请求,则服务器将客户端套接字更改为SSLSocket吗?

再一次,是的,有可能。它有时被称为“ 端口统一
”,并在Grizzly和Glassfish中实现。

之所以起作用,是因为HTTP和TLS(HTTPS可以在其上工作)都是希望客户端首先进行通信的协议。因此,服务器可以检测到客户端最初发送的

ClientHello
消息是TLS
消息(在这种情况下,它应该尝试进行TLS握手)还是纯HTTP请求(例如
GET / HTTP/1.1
…)。

我怀疑使用端口统一更容易

SSLEngine
,否则,可能很难在纯套接字上实现预读,您仍然可以通过进行转换
SSLSocketFactory.createSocket(Socket,...)

注意,尽管如此,这还是很不寻常的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485958.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号