【问题标题】: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() 读取主机,还是我遗漏了什么?

【问题讨论】:

    标签: java sockets ssl networking


    【解决方案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) 以查看其中的逻辑万一主人失踪了

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      相关资源
      最近更新 更多