【发布时间】:2018-04-04 18:03:00
【问题描述】:
我正在使用 Java SE 8。
当我连接 TLS (TCP/IP) 服务器时,我想控制(自定义)主机名检查逻辑。例如,仅当主机名匹配时才接受,或者总是匹配而不进行任何检查。
对于 HTTP,我可以使用HttpsURLConnection 的setHostnameVerifier() 方法。
我想在 TCP/IP 而不是 HTTP 上做类似的事情。例如 TCP/IP TLS 上的 MQTT(S)。
我已阅读以下网站,但无法获得有用的信息。
https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#SettingHostnameVerifier
有什么方便的方法吗?
编辑 2017/10/24
一些 cmets 表明 TCP/IP 不处理主机名。 真的。我应该改写我的问题。
更新的问题是“如何在连接目标的主机名和服务器证书中的主机名之间编写检查主机名功能?”
使用getByName()获取连接目标IP地址。
https://docs.oracle.com/javase/8/docs/api/java/net/InetAddress.html#getByName-java.lang.String-
【问题讨论】: