通过SSL连接到Android App上的OpenFire服务器?

时间:2016-08-25 15:30:50

标签: android ssl xmpp openfire xmppframework

使用 XMPP框架/ OpenFire Android 上使用实时聊天应用,然后转移到新的云端服务器,但我遇到了一些旧Android用户的问题连接。新用户可以正常登录并连接到OpenFire服务器。

使用旧用户帐户时,第一次连接失败,但第二次连接失败。谁知道问题可能是什么?

无法弄清问题是什么。

2 个答案:

答案 0 :(得分:1)

如果您尝试将xmpp与openfire连接,那么只需使用smack库授予 XMPPTCPConnectionConfiguration 的ssl权限,

 private XMPPTCPConnectionConfiguration buildConfiguration() throws XmppStringprepException {
    XMPPTCPConnectionConfiguration.Builder builder =
            XMPPTCPConnectionConfiguration.builder();

    builder.setHost(Common.HOST);
    builder.setPort(PORT);
    builder.setCompressionEnabled(false);
    builder.setDebuggerEnabled(true);
    builder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    builder.setSendPresence(true);

    if (Build.VERSION.SDK_INT >= 14) {
        builder.setKeystoreType("AndroidCAStore");
        builder.setKeystorePath(null);
    } else {
        builder.setKeystoreType("BKS");
        String str = System.getProperty("javax.net.ssl.trustStore");
        if (str == null) {
            str = System.getProperty("java.home") + File.separator + "etc" + File.separator + "security"
                    + File.separator + "cacerts.bks";
        }
        builder.setKeystorePath(str);
    }
    DomainBareJid serviceName = JidCreate.domainBareFrom(Common.HOST);
    builder.setServiceName(serviceName);


    return builder.build();
}

并在此处与服务器连接时调用此示例,请参阅

XMPPTCPConnectionConfiguration config = buildConfiguration();
            SmackConfiguration.DEBUG = true;
            this.connection = new XMPPTCPConnection(config);
            this.connection.connect();

有关详细信息,请访问此example

感谢希望这可以帮助您解决问题(Y)。

答案 1 :(得分:0)

要使用SSL从Android设备连接到openfire(任何xmpp服务器),请使用Smack

// Set key for SSL connection
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    config.setKeystoreType("AndroidCAStore");
    config.setKeystorekeyPath(null);
} else {
    config.setKeystoreType("BKS");
    String keyPath = System.getProperty("javax.net.ssl.trustStore");
    if (keyPath == null)
        keyPath = System.getProperty("java.home") + File.separator + "etc"
                + File.separator + "security" + File.separator + "certs.bks";
        config.setKeystorekeyPath(keyPath);
    }
}

// Now set custom SSL to configuration
try {
    SSLContext ssl = SSLContext.getInstance("TLS");
    ssl.init(null, new TrustManager[]{new TLSUtils.AcceptAllTrustManager()}, null);
    ssl.getServerSessionContext().setSessionTimeout(10 * 1000);
    config.setCustomSSLContext(ssl);
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (KeyManagementException e) {
    e.printStackTrace();
}

config.setSecurityMode(Connectionconfig.SecurityMode.required);
// config is type of XMPPTCPConnectionConfiguration