Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何禁用Java';s SSL反向DNS查找_Java_Ssl_Dns - Fatal编程技术网

如何禁用Java';s SSL反向DNS查找

如何禁用Java';s SSL反向DNS查找,java,ssl,dns,Java,Ssl,Dns,我有一个正在开发的服务器和几个连接到它的开发人员。 此服务器将Java的TLS实现与SSLEngine一起使用 我们看到,一开始,每个新连接都会有一个很长的延迟(30-40秒)。我们将其缩小到反向DNS查找超时。我们通过将所有IP放入主机文件解决了这个问题 现在,问题是我们将逐步扩大我们的用户群,我不想编辑主机文件,特别是因为我们不能保证它们将拥有静态IP 有没有办法在Java的SSL/TLS中禁用反向DNS查找步骤 我想把它作为一个可配置的参数,这样我们就可以在开发过程中关闭它。这个问题是在2

我有一个正在开发的服务器和几个连接到它的开发人员。 此服务器将Java的TLS实现与
SSLEngine
一起使用

我们看到,一开始,每个新连接都会有一个很长的延迟(30-40秒)。我们将其缩小到反向DNS查找超时。我们通过将所有IP放入
主机
文件解决了这个问题

现在,问题是我们将逐步扩大我们的用户群,我不想编辑
主机
文件,特别是因为我们不能保证它们将拥有静态IP

有没有办法在Java的SSL/TLS中禁用反向DNS查找步骤


我想把它作为一个可配置的参数,这样我们就可以在开发过程中关闭它。

这个问题是在2006年的。底线是,它似乎只发生在Windows java运行时中。在中,接近底部是一个建议的解决方案。以下是:

基本上,SSL握手过程中的反向DNS查找会导致长时间延迟 超时

要解决此问题,请将服务器地址缓存为InetAddress对象 并在创建新的套接字时在套接字构造函数中重用它 连接到您的服务器


希望其中一个能对您起作用。

我今天在尝试仅通过IP地址创建SSL套接字连接时遇到了同样的问题。这导致反向DNS查找尝试,因此速度非常慢

对我来说,解决方案只是在为SSL连接创建InetAddress时传递一个伪空字符串作为主机名。就是我变了

InetAddress.getByAddress(addrBytes)


而且它不再进行反向DNS查找。

Ari将空主机名传递给
InetAddress
的解决方案适用于连接到单个主机,但在通过IP地址连接到多个主机时会产生一些副作用。Java使用元组
缓存SSLSession对象。这可以在OpenJDK中看到。因此,以前连接的TLS设置(在我的例子中特别是TLS协议版本)应用于到不同主机的新连接(因为两者共享相同的空主机名)。在我的例子中,新主机拒绝了先前主机协商的降级TLS v1协议,导致TLS握手错误

解决方案是基于远程IP地址构建一个唯一的主机名,如下所示:

String hostname = String.format("host-%s", BaseEncoding.base16().encode(address.getAddress()));
InetAddress newAddress = InetAddress.getByAddress(hostname, address.getAddress());

因此,Java执行的反向DNS查找被禁用,但缓存到远程主机的TLS设置仅应用于同一远程主机和端口,而没有串扰效应。

您使用的是什么应用程序服务器?Oracle WebLogic Server使用Certicom而不是Sun JSSE实现,因此配置机制各不相同。缓存是什么意思?我们怎么能做到呢?
String hostname = String.format("host-%s", BaseEncoding.base16().encode(address.getAddress()));
InetAddress newAddress = InetAddress.getByAddress(hostname, address.getAddress());