如何在Java8上定制TCP/IP(非HTTP)TLS的主机名检查?

如何在Java8上定制TCP/IP(非HTTP)TLS的主机名检查?,java,ssl,tcp,Java,Ssl,Tcp,我正在使用JavaSE8 当我连接TLS(TCP/IP)服务器时,我想控制(自定义)主机名检查逻辑。例如,仅当主机名匹配时接受,或始终匹配而不进行任何检查时接受。 对于HTTP,我可以使用HttpsURLConnection的setHostnameVerifier()方法 我想在TCP/IP而不是HTTP上做类似的事情。例如,TCP/IP TLS上的MQTT 我读过以下网站,但没有得到有用的信息 有什么方便的方法吗 编辑2017/10/24 一些评论指出TCP/IP不处理主机名。 符合事实

我正在使用JavaSE8

当我连接TLS(TCP/IP)服务器时,我想控制(自定义)主机名检查逻辑。例如,仅当主机名匹配时接受,或始终匹配而不进行任何检查时接受。 对于HTTP,我可以使用
HttpsURLConnection
setHostnameVerifier()
方法

我想在TCP/IP而不是HTTP上做类似的事情。例如,TCP/IP TLS上的MQTT

我读过以下网站,但没有得到有用的信息

有什么方便的方法吗

编辑2017/10/24

一些评论指出TCP/IP不处理主机名。 符合事实的我应该重新措辞我的问题

更新的问题是“如何在连接目标主机名和服务器证书主机名之间编写检查主机名函数?”

使用
getByName()
获取连接目标IP地址。

获取
SSLSession
,或者通过
握手完成侦听器
,或者从
SSLSocket
内联,在连接后,从会话获取对等证书,从证书获取
subjectDN
,并根据您认为要连接的主机名进行检查。如果出现任何故障,请关闭连接。

谢谢您的回答!我实现了我的目标。我对HTTP层提供HostnameVerifier感到困惑,所以我猜测可能存在类似的底层功能。现在我明白了它并不存在。