smack使用TSL连接openfire

连接openfire服务器有三种方式

纯文本

starttls

tls/ssl

第二种是纯文本的扩展协议,如果双方都支持加密,则可将纯文本传输升级为加密传输,加密传输和非加密

传输公用一个端口

public XMPPConnectionFactory(@Value("${im.host}") String host,@Value("${truststore.pwd}") String storePass){
        Base64.setEncoder(new BASE64Encoder());
        try {
            KeyStore trustStore=KeyStore.getInstance("JKS");
            trustStore.load(getClass().getResourceAsStream("/truststore"),storePass.toCharArray());
            TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
            tmf.init(trustStore);
            SSLContext sslContext=SSLContext.getInstance("TLS");
            sslContext.init(null,tmf.getTrustManagers(),null);
            SmackConfiguration.DEBUG = true;
            //使用加密连接
            config = XMPPTCPConnectionConfiguration.builder()
                    .setHost(host)
                    .setPort(5223)
                    .setSocketFactory(sslContext.getSocketFactory())
                    .setServiceName(host)
                    .setResource("mall")
                    .build();
            //使用STARTTLS连接
//            config = XMPPTCPConnectionConfiguration.builder()
//                    .setHost(host)
//                    .setPort(5222)
//                    .setCustomSSLContext(sslContext)
//                    .setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible)
//                    .setServiceName(host)
//                    .setResource("mall")
//                    .build();
            //使用纯文本
//            config = XMPPTCPConnectionConfiguration.builder()
//                    .setHost(host)
//                    .setPort(5222)
//                    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
//                    .setServiceName(host)
//                    .setResource("mall")
//                    .build();
        } catch (KeyStoreException|KeyManagementException|CertificateException|NoSuchAlgorithmException|IOException e) {
            logger.error("",e);
        }
    }



你可能感兴趣的:(JAVA)