在现有套接字SSLSocketFactory上分层的Java SSL套接字:它需要主机参数吗



javax.net.ssl.SSLSocketFactory定义了一个方法createSocket​(Socket s, String host, int port, boolean autoClose),该方法返回SSLSocket的一个实例。

我正在努力理解这个方法,所以我的问题是:为什么这个方法需要一个host参数?不应该从普通套接字的底层getInetAddress().getHostName()读取主机吗?还是我遗漏了什么?

在SSLSocketFactoryImpl中实现后,它将返回新的SSLSocketImpl,在这里您可以看到以下代码片段

if (peerHost == null || peerHost.isEmpty()) {
boolean useNameService =
trustNameService && conContext.sslConfig.isClientMode;
useImplicitHost(useNameService);
} else {
conContext.sslConfig.serverNames =
Utilities.addToSNIServerNameList(
conContext.sslConfig.serverNames, peerHost);
}

(注意peerHost与主机参数相同(

因此,我认为这里的重点是,如果你不提供主机名,那么查找主机名需要付出更多的努力——你可以按照useImplicitHost(useNameService)查看其中的逻辑,以防主机缺少

最新更新