【问题标题】:Cannot establish TLS connection to Openfire 4.1.3 server with Smack 4.2 on Android: SSLProtocolException: SSL handshake aborted无法在 Android 上使用 Smack 4.2 建立与 Openfire 4.1.3 服务器的 TLS 连接:SSLProtocolException:SSL 握手中止
【发布时间】:2017-09-16 09:53:51
【问题描述】:

我正在尝试使用 Smack 4.2 连接到我的 Openfire 4.1.3 服务器,当前配置工作正常:

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    config.setXmppDomain(serviceName);
    config.setHost(context.getString(R.string.server));
    config.setHostnameVerifier(verifier);
    config.setHostAddress(addr);
    config.setResource("Android");
    config.setPort(Integer.parseInt(context.getString(R.string.server_port)));
    config.setDebuggerEnabled(true);

    XMPPTCPConnection.setUseStreamManagementResumptionDefault(true);
    XMPPTCPConnection.setUseStreamManagementDefault(true);
    connection = new XMPPTCPConnection(config.build());

如果我尝试与SecurityMode.required 连接,我无法建立任何连接。我阅读了有关在设备上设置 CA 的信息,但我不知道该怎么做。有什么帮助吗?

编辑: 这些是为尝试与SecurityMode.required 连接而添加的新行

config.setSecurityMode(ConnectionConfiguration.SecurityMode.required);
    config.setCompressionEnabled(false);

    SSLContext sslContext = null;
    try {
        sslContext = createSSLContext(context);
    } catch (KeyStoreException | NoSuchAlgorithmException
            | KeyManagementException | IOException | CertificateException e) {
        e.printStackTrace();
    }

    config.setCustomSSLContext(sslContext);
    config.setSocketFactory(sslContext.getSocketFactory());

它会生成这个错误堆栈:

W/System.err: javax.net.ssl.SSLHandshakeException: Handshake failed
W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:429)
W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:682)
W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:644)
W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.initReaderAndWriter(XMPPTCPConnection.java:656)
W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.initConnection(XMPPTCPConnection.java:633)
W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:891)
W/System.err:     at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:377)
W/System.err:     at it.chiaia.portaleragazze.chat.xmpp.XmppServer$2.doInBackground(XmppServer.java:176)
W/System.err:     at it.chiaia.portaleragazze.chat.xmpp.XmppServer$2.doInBackground(XmppServer.java:169)
W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:305)
W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
W/System.err:     at java.lang.Thread.run(Thread.java:761)
W/System.err: Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb38b1400: Failure in SSL library, usually a protocol error
W/System.err: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER (external/boringssl/src/ssl/tls_record.c:192 0xa769d1aa:0x00000000)
W/System.err:     at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
W/System.err:   ... 14 more

【问题讨论】:

  • 您需要提供更多详细信息。 “我无法建立任何连接”并没有携带很多信息。
  • 是的,很抱歉。在此guide 之后,我创建了密钥库文件,但在尝试连接时我得到 IOException: Handshake failed
  • 始终显示完整的异常消息堆栈跟踪。
  • 编辑了主要问题正文以显示添加的代码行和堆栈跟踪!

标签: android ssl xmpp openfire smack


【解决方案1】:

setUsernameAndPassword() 方法丢失。

 val config= XMPPTCPConnectionConfiguration.builder()
                    .setXmppDomain(mDomainName)
                    .setUsernameAndPassword(mUsername,mPassword)
                    .setDebuggerEnabled(true)
                    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)



            mConnection= XMPPTCPConnection(config.build())
            mConnection!!.connect().login()

【讨论】:

  • 我知道,但我在创建连接时不需要它。我需要将安全模式设置为启用!
【解决方案2】:
W/System.err: Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb38b1400: Failure in SSL library, usually a protocol error
W/System.err: error:100000f7:SSL routines:OPENSSL_internal:WRONG_VERSION_NUMBER (external/boringssl/src/ssl/tls_record.c:192 0xa769d1aa:0x00000000)

您的 Android 平台不喜欢 Openfire 使用的 SSL/TLS 版本。

【讨论】:

  • 我明白了,有什么办法可以解决这个问题吗?
猜你喜欢
  • 2021-01-16
  • 2015-07-27
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 2020-04-06
  • 1970-01-01
相关资源
最近更新 更多