Smack 4.4.2通过证书建立安全连接



我有三个证书root.crt,network.crt components.crt必须与建立连接的请求一起发送。在Smack 4.1.3中,我使用这个-


XMPPTCPConnectionConfiguration configuration = 
XMPPTCPConnectionConfiguration.builder()
.setServiceName("hostname")
.setHost("hostname")
.setCompressionEnabled(false)
.setPort(5222)
.setResource("Something")
.setSecurityMode(ConnectionConfiguration.SecurityMode.required)
.setUsernameAndPassword("somename","password")
.setCustomSSLContext(sslContext).build();
AbstractXMPPConnection connection = new XMPPTCPConnection(configuration);
connection.connect();
connection.login();
It worked perfectly. Now I am using Smack 4.4.2 how do I make a connection? I am using this code below-             

```XMPPTCPConnectionConfiguration config = null;
XMPPTCPConnectionConfiguration.Builder builder;
try {
builder = XMPPTCPConnectionConfiguration.builder()
.setServiceName(JidCreate.domainBareFrom(Important.getXmppHost()))
.setHost(Important.getXmppHost())
// .setDebuggerEnabled(true)
.setPort(Integer.parseInt(Important.getXmppPort()))
.setUsernameAndPassword(getLoginInfo("phone_no"), getLoginInfo("sec"))
.setSecurityMode(ConnectionConfiguration.SecurityMode.required)
.setResource(Important.getXmppResource())
.setCompressionEnabled(false);
KeyStore keyStore = configKeyStore(builder);
configSSLContext(builder, keyStore);
config = builder.build();
} catch (XmppStringprepException | KeyStoreException | KeyManagementException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
private KeyStore configKeyStore(XMPPTCPConnectionConfiguration.Builder builder) throws KeyStoreException {
KeyStore keyStore;
builder.setKeystorePath(null);
builder.setKeystoreType("AndroidCAStore");
keyStore = KeyStore.getInstance("AndroidCAStore");
return keyStore;
}
private void configSSLContext(XMPPTCPConnectionConfiguration.Builder builder, KeyStore keyStore) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
TrustManagerFactory trustManagerFactory = TrustManagerFactory
.getInstance(KeyManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(keyStore);
builder.setCustomSSLContext(sslContext);
}

由于不赞成使用SetCustomSSLContext,服务器将向我提供-error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

如何连接到服务器?

我找到了解决这种情况的方法。使用的

.setCustomX509TrustManager(trustfactory)

解决了我的问题。

最新更新