有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java SSL握手挂起

我在论坛上看到过这个问题,但找不到合适的解决方法。而且所有这些问题都缺少一些信息,所以我想把我学到的东西都放在这里。连接点

我在openfire中使用SSL/TLS进行双向身份验证。获得了自签名通配符证书。这意味着我在客户端和服务器上都有CA。现在这是可行的,但有时SSL握手会在某些特定线路上出现问题。来自服务器端的日志:

org.apache.mina.filter.ssl.SslFilter  - Session Server[40](ssl...): Processing the SSL Data

在客户端,我使用的是SMACK,因此构建了我给出的大约2分钟回复超时的配置,只是为了检查行为;我还设置了hostNameVerifier

所以当它挂起时,我可以看到以下日志:

05-07 17:35:45.705 D/SMACK: SENT (1): <stream:stream xmlns='jabber:client' to='mydomain.com' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
05-07 17:35:45.712 D/SMACK: RECV (1): <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mydomain.com" id="9haislljp2" xml:lang="en" version="1.0">
05-07 17:35:45.721 D/SMACK: RECV (1): <stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>EXTERNAL</mechanism></mechanisms></stream:features>
05-07 17:35:45.723 D/SMACK: SENT (1): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'></starttls>
05-07 17:35:45.730 D/SMACK: RECV (1): <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

在这里,它会挂起一段未定义的时间,有时大约20秒,有时一分钟或更长

但就在那之后,我看到的第一个日志是:

05-07 17:36:15.151 : HostNameVerifier callback verify: hostname:mydomain.com SessionID:[B@3cedf14
                                             CipherSuite:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
                                             Protocol:TLSv1.2
05-07 17:36:15.153 D/SMACK: SENT (1): <stream:stream xmlns='jabber:client' to='mydomain' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
05-07 17:36:15.161 D/SMACK: RECV (1): <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="mydomain.com" id="9haislljp2" xml:lang="en" version="1.0"><stream:features><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>EXTERNAL</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><register xmlns="http://jabber.org/features/iq-register"/></stream:features>

并且XMPP已连接

所以我从jdk和其他来源查看了这个主机名验证程序功能,我不确定,但我完全意识到它在做一些dns查找。我还将我的ip域放在etc/hosts中。因此,这应该可以避免dns查找,但仍然可以。无论如何,如果有人能指出一些具体的东西,我将不胜感激

我关注的链接:

Apache MINA - stuck on SSL connection

How to disable Java's SSL Reverse DNS Lookup

Android 4.2 slow SSL/TLS

如果有人需要更多信息,我们将非常乐意与大家分享

Openfire版本:4.1.3

Smack版本:4.2.0

运行openfire的Ubuntu:16.04

JDK已安装:openjdk 7,8(两者都试用过)


共 (0) 个答案