java - 从 java-smack 客户端连接到 Openfire 时发生 SSL 错误

标签 java ssl xmpp openfire smack

我最近正在开发 Openfire 客户端。我遇到了这个奇怪的问题,到目前为止我还无法弄清楚(我有一些线索,但仍然没有可靠的解决方案)。 我们有 2 个 openfire 服务器:

  • 首先,我们用于测试的它托管在通过 adsl 连接到互联网的普通电脑上,服务器位于 NAT 之后,一切配置顺利,工作完美。我们的客户可以正常连接。
  • 第二台(我们称之为生产)专业专用服务器位于德国某处,安装了 OF,操作系统与测试服务器相同,OF 以完全相同的方式设置

现在,当从我们的客户端连接到生产环境时,我们在尝试进行身份验证时遇到了以下问题:

javax.net.ssl.SSLException: Received fatal alert: internal_error at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.recvAlert(Unknown Source) at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source) at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:806) at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:267) at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) java.lang.IllegalStateException: Not connected to server. at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445) at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:352) at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) at Main.connectToJabber(Main.java:31) at Main.main(Main.java:16) Exception in thread "main" java.lang.IllegalStateException: Not connected to server. at org.jivesoftware.smack.XMPPConnection.sendPacket(XMPPConnection.java:445) at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:69) at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:362) at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:203) at Main.connectToJabber(Main.java:31) at 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();
    }
}

一些观察:

  • 当行connection.login(...)注释时,没有错误,所以导致错误的原因就在那里
  • 连接测试服务器时System.out...写入true false,
  • 连接生产服务器 System.out 时...写入 false false
  • 尝试了以下所有组合:cc.setCompressionEnabled() cc.setSASLAuthenticationEnabled(); (真,真,假真,真假,假假)
  • 尽管出现错误,用户仍已登录 总结一下:

与测试环境的连接始终有效,在生产环境中:从我的位置 - 没问题,其他位置 - 提到的错误, 我们使用 SMACK API 3.2.1

其中一个想法是它必须对证书做一些事情。

任何提示或想法都受到高度重视

最佳答案

糟糕的解决方案!因为您不知道连接速度,并且如果在早期建立连接,您也会阻止您的应用程序继续登录。 我现在可以提供的解决方案是 addConnectionListener 并在 'reconnectionSuccessful()' 函数中调用 login() ,我希望这个函数不会是第一次调用就在连接断开并再次连接后!如果没有,则表明 smack 库的架构很糟糕。

关于java - 从 java-smack 客户端连接到 Openfire 时发生 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862692/

相关文章:

java - 在 Windows 7 64 位中设置 JMF

java - 使用 MapReduce 从多个 MongoDB 集合中搜索 - Java

IIS、重定向和 HTTPS

Firebase 托管 ssl 证书显示不同的域

c# - 根据使用 imap 的验证程序,远程证书无效

android - (a)Smack 的 IQ.toXml() 返回没有自定义子元素的 XML

node.js - 如何在 google chat/hangouts 上使用 nodejs xmpp 客户端发送 emojis/表情符号

ios - 如何在 objective-c 中通过ios中的XMPPFramework连接XMPP服务器

java - PowerMock mockStatic 没有捕获模拟的静态 void 方法调用

java - 是否可以创建 ByteArrays 的 ByteArray 作为 kotlin 中的元素?