我最近更新了asmack罐子。现在我收到这样的错误:

07-18 12:49:29.523:W / XMPPConnection(6817):javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。

当我尝试连接时。早期,一切正常(使用旧版本)。

最佳答案

是的,如果您编写以下类似内容,则使用下面的旧版本的asmack(至aSmack-0.8.10)可以正常工作,没有任何错误,


ConnectionConfiguration connConfig =新的ConnectionConfiguration(“ host_name”,5222);
connConfig.setSecurityMode(SecurityMode.enabled);


但是,对于较新版本的asmack(aSmack-4.0.4),如果使用connConfig.setSecurityMode(SecurityMode.enabled),则该错误将继续存在。

正如@cOcO在此处提到的那样,未正确配置SSL。为此,您可以使用MemorizingTrustManager

它是一个开放源代码库,将其下载并在Eclipse中作为android项目导入,并以libraryProject的形式添加到您的android项目中。

添加此库后,将以下行添加到您的AndroidManifest.xml

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

<activity android:name="de.duenndns.ssl.MemorizingActivity"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

</application>


现在,在您的xmpp服务中添加以下代码

try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, MemorizingTrustManager.getInstanceList(this.getApplicationContext()), new SecureRandom());
            connConfig.setCustomSSLContext(sc);
        } catch (NoSuchAlgorithmException e) {
            throw new IllegalStateException(e);
        } catch (KeyManagementException e) {
            throw new IllegalStateException(e);
        }


希望以上代码能解决您的问题。

编辑:16_10_2014
有关信任管理器的更多信息,您可以访问此链接https://github.com/Flowdalic/asmack/wiki/Truststore

10-05 22:57