【发布时间】:2012-02-10 08:55:37
【问题描述】:
我最近正在开发 Openfire 客户端。我有一个奇怪的问题,到目前为止我无法弄清楚(我有一些线索,但仍然没有可靠的解决方案)。 我们有 2 个 openfire 服务器:
- 首先我们用于测试它托管在通过adsl连接到互联网的普通PC上,服务器在NAT后面,一切配置顺利,工作完美。我们的客户连接没有任何问题。
- 第二台(我们称之为生产)专业专用服务器,位于德国某处,安装了 OF,操作系统与测试服务器相同,OF 设置方式完全相同
现在,当从我们的客户端连接到生产环境时,我们在尝试进行身份验证时遇到了以下问题:
javax.net.ssl.SSLException:收到致命警报:internal_error 在 sun.security.ssl.Alerts.getSSLException(未知来源) 在 sun.security.ssl.Alerts.getSSLException(未知来源) 在 sun.security.ssl.SSLSocketImpl.recvAlert(未知来源) 在 sun.security.ssl.SSLSocketImpl.readRecord(未知来源) 在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(未知来源) 在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 在 sun.security.ssl.SSLSocketImpl.startHandshake(未知来源) 在 org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:806) 在 org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:267) 在 org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) 在 org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) java.lang.IllegalStateException:未连接到服务器。 在 org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445) 在 org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) 在 org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:352) 在 org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) 在 Main.connectToJabber(Main.java:31) 在 Main.main(Main.java:16) 线程“主”java.lang.IllegalStateException 中的异常:未连接到服务器。 在 org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445) 在 org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) 在 org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:362) 在 org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) 在 Main.connectToJabber(Main.java:31) 在 Main.main(Main.java:16)
现在最有趣的部分:当我从我的公寓使用我们的客户端连接到生产服务器时,我没有看到该错误,当我们从其他开发人员公寓连接到生产服务器时,我们遇到了这个错误,我们已经有不同的互联网提供商(我不知道这是否与此有关)。 我们整夜都在看它,到目前为止还没有任何线索。 我们编写基本代码只是为了检查连接:
public static void connect() {
ConnectionConfiguration cc = new ConnectionConfiguration("prod ip",
5222);
cc.setCompressionEnabled(true);
cc.setSASLAuthenticationEnabled(true);
Connection connection = new XMPPConnection(cc);
try {
connection.connect();
connection.login(login, pass, "resource");
System.out.println(connection.isSecureConnection() + " " + connection.isUsingCompression());
} catch (XMPPException e1) {
e1.getStackTrace();
}
}
一些观察:
- 当 line connection.login(...) 注释时,没有错误,所以导致错误的原因就在那里
- 连接测试服务器时 System.out... 写入 true false,
- 连接生产服务器时 System.out... 写入 false false
- 尝试了以下所有组合: cc.setCompressionEnabled() cc.setSASLAuthenticationEnabled(); (真、真、假、真、假、假)
- 尽管出现错误,但用户已登录 总结一下:
与测试环境的连接始终有效,生产环境:从我的位置 - 没问题,其他位置 - 提到错误, 我们使用 SMACK API 3.2.1
其中一个想法是它必须对证书做一些事情。
任何高度赞赏的提示或想法
【问题讨论】:
-
我已经回答过了,这个问题没有如你所见(或没有)回答
-
不知道您所说的“或不”是什么意思,但您是否尝试在
connect和login之间“睡觉”?这可能是一种解决方法,或者只是证明您有同样的问题! -
嗯,显然它可以工作,在我们的例子中 2000 毫秒就足够了,对不起我之前的帖子,我们花了 12 小时没有成功,我已经看了 10 次这个线程,我猜无论如何,“未回答”让我认为它没有帮助,现在我想知道为什么当我们尝试连接到测试服务器时一切都很好
-
嗯,可能是网络延迟的问题?我只是看看smack代码(连接方法)......
标签: java ssl xmpp openfire smack