在Android 5.0及以上版本中,Asmack登录问题

5

我在Android 5.0及以上版本上遇到了asmack SSL连接问题。我认为这与安全有关。

在连接之前,我通过禁用以下内容来解决该问题:

config.setSASLAuthenticationEnabled(false);
config.setSecurityMode(SecurityMode.disabled);

但是我仍希望启用安全性。如何在不禁用setSecurityMode的情况下解决这个问题?

我查看了5.0版本的变化: http://developer.android.com/about/versions/android-5.0-changes.html#ssl

但是没有找到解决方案。

我的logcat日志如下:

02-26 17:28:20.596: W/System.err(23043):   -- caused by: javax.net.ssl.SSLHandshakeException: Handshake failed
02-26 17:28:20.596: W/System.err(23043): javax.net.ssl.SSLHandshakeException: Handshake failed
02-26 17:28:20.596: W/System.err(23043):    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:392)
02-26 17:28:20.601: W/System.err(23043):    at com.android.org.conscrypt.OpenSSLSocketImpl.waitForHandshake(OpenSSLSocketImpl.java:652)
02-26 17:28:20.601: W/System.err(23043):    at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:614)
02-26 17:28:20.601: W/System.err(23043): Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x9fca9e00: Failure in SSL library, usually a protocol error
02-26 17:28:20.601: W/System.err(23043): error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error (external/openssl/ssl/s23_clnt.c:765 0xaec30bf9:0x00000000)
02-26 17:28:20.601: W/System.err(23043):    at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
02-26 17:28:20.601: W/System.err(23043):    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:320)

当安全性启用并且您遇到此问题时,请包含您收到的错误消息。 - Tom
谢谢您的关注,我已经添加了logcat。 - Jaspreet Chhabra
1个回答

1
问题是:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
        config.setTruststoreType("AndroidCAStore");
        config.setTruststorePassword(null);
        config.setTruststorePath(null);
    } else {
        config.setTruststoreType("BKS");
        String path = System.getProperty("javax.net.ssl.trustStore");
        if (path == null)
            path = System.getProperty("java.home") + File.separator
                    + "etc" + File.separator + "security"
                    + File.separator + "cacerts.bks";
        config.setTruststorePath(path);
    }

我使用的是自签名的SSL证书。通过在Openfire上添加SSL证书并在应用程序中使用它来解决该问题。

cvofjaspreet@gmail.com


有没有人能够解释一下如何在Openfire上添加SSL证书? - Jaspreet Chhabra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接