Java SSL 套接字在现有套接字 SSLSocketFactory 上分层:它是不是需要主机参数?
Posted
技术标签:
【中文标题】Java SSL 套接字在现有套接字 SSLSocketFactory 上分层:它是不是需要主机参数?【英文标题】:Java SSL socket layered over existing socket SSLSocketFactory: does it require a host parameter?Java SSL 套接字在现有套接字 SSLSocketFactory 上分层:它是否需要主机参数? 【发布时间】:2021-09-10 11:46:35 【问题描述】:类javax.net.ssl.SSLSocketFactory
定义了一个方法createSocket(Socket s, String host, int port, boolean autoClose)
,它返回一个SSLSocket
的实例。
我试图理解这个方法,所以我的问题是:为什么这个方法需要一个主机参数?不应该从普通套接字的底层getInetAddress().getHostName()
读取主机,还是我遗漏了什么?
【问题讨论】:
【参考方案1】:跟随SSLSocketFactoryImpl中的实现,它会返回新的SSLSocketImpl,在这里你可以看到下面的sn-p代码
if (peerHost == null || peerHost.isEmpty())
boolean useNameService =
trustNameService && conContext.sslConfig.isClientMode;
useImplicitHost(useNameService);
else
conContext.sslConfig.serverNames =
Utilities.addToSNIServerNameList(
conContext.sslConfig.serverNames, peerHost);
(注意peerHost与host参数相同)
所以我认为这里的重点是,如果您不提供主机名,则需要花费更多的精力来查找以获取主机名 - 您可以关注 useImplicitHost(useNameService)
以查看其中的逻辑万一主人失踪了
【讨论】:
以上是关于Java SSL 套接字在现有套接字 SSLSocketFactory 上分层:它是不是需要主机参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 PEM 文件在 Java 中创建 SSL 套接字?
java连接本地数据库 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接