无法使用 Asmack 连接到我的 ejabberd 服务器

Posted

技术标签:

【中文标题】无法使用 Asmack 连接到我的 ejabberd 服务器【英文标题】:Can't connect to my ejabberd server using Asmack 【发布时间】:2014-06-26 06:44:24 【问题描述】:

在 logcat 中得到这些错误:

06-26 02:34:08.352: W/System.err(1261): java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore jks implementation not found 06-26 02:34:08.352: W/System.err(1261): 在 java.security.KeyStore.getInstance(KeyStore.java:119) 06-26 02:34:08.352: W/System.err(1261): 在 org.jivesoftware.smack.ServerTrustManager.(ServerTrustManager.java:71) 06-26 02:34:08.352: W/System.err(1261): 在 org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:858) 06-26 02:34:08.352: W/System.err(1261): 在 org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:250) 06-26 02:34:08.352: W/System.err(1261): at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:46) 06-26 02:34:08.362: W/System.err(1261): at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:72) 06-26 02:34:08.362: W/System.err(1261): 由: java.security.NoSuchAlgorithmException: KeyStore jks implementation not found 06-26 02:34:08.362: W/System.err(1261): 在 org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177) 06-26 02:34:08.362: W/System.err(1261): 在 org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151) 06-26 02:34:08.362: W/System.err(1261): 在 java.security.KeyStore.getInstance(KeyStore.java:116) 06-26 02:34:08.362: W/System.err(1261): ... 还有 5 个

06-26 02:34:09.802:W/System.err(1261):SASL 身份验证使用机制 DIGEST-MD5 失败: 06-26 02:34:09.802: W/System.err(1261): 在 org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:341) 06-26 02:34:09.802: W/System.err(1261): 在 org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:242) 06-26 02:34:09.802: W/System.err(1261): 在 org.jivesoftware.smack.Connection.login(Connection.java:371) 06-26 02:34:09.802: W/System.err(1261): 在 com.example.contactupdater.MainActivity$MainActivity2.login(MainActivity.java:358) 06-26 02:34:09.802: W/System.err(1261): 在 com.example.contactupdater.MainActivity$MainActivity2.login(MainActivity.java:347) 06-26 02:34:09.802: W/System.err(1261): at com.example.contactupdater.MainActivity$1.run(MainActivity.java:320)

【问题讨论】:

请告诉我们您用来连接 ejabberd 的代码以及您使用的 Asmack 版本。 感谢您的回复,但我已经通过添加密钥库路径解决了这个问题。将添加答案。谢谢 @Punit 请发布答案,我面临同样的问题.. @shriduttkothari 请查看我的回答。抱歉耽搁了…… 【参考方案1】:

这是这个问题的答案...

androidConnectionConfiguration config = new AndroidConnectionConfiguration(server,
                port);
       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);
        

【讨论】:

干得好,但这将消除密钥存储错误“SASL 身份验证失败使用机制 DIGEST-MD5”。在我的代码中添加您的解决方案后,我仍然面临这个错误......希望你会尽快回答!!!! 我在尝试登录时遇到错误,这里是堆栈跟踪 SASL 身份验证失败,使用机制 DIGEST-MD5: at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:341) at org .jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:242) at org.jivesoftware.smack.Connection.login(Connection.java:371) 不知道这里有什么问题!!! 您使用 jid 作为 JID@domain.com 吗?如果是,请删除 @domain.com 就像如果您有 abc@domain.com 则仅使用 abc 作为用户名。

以上是关于无法使用 Asmack 连接到我的 ejabberd 服务器的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 aSmack 连接到本地 XMPP 服务器

Asmack 18 连接:google.com:5222 异常:无法连接到 talk.google.com 远程服务器超时

无法打开 ejabbered Web 仪表板 localhost:5280

使用 asmack 访问连接到 Ejabberd 的 MySQL

无法将 agsXmpp 客户端连接到 eJabberd 服务器

无法注册新用户 android asmack “无法生成验证码”