天天看點

「網絡」使用tigase-server搭建私有聊天伺服器

作者:架構思考

一、tigase簡介

tigase 完全實作了XMPP協定,除了全面實施的兩個核心協定,它支援大多數的你可能永遠都需要的擴充協定。Tigase是開源的,如果你有有那能力,你可以定制自己的XMPPServer,雖然經過了很多次測試,但是仍然有可能有bug,你可以修補bug并送出代碼到官方

二、使用docker搭建tigase-server

參考位址:tigase.net/tigase-meet…

安裝tigase-server之前首先需要一個mysql

首先拉取鏡像

docker pull tigase/tigase-xmpp-server ##拉取鏡像
docker run -d --name tigase-server --link mysql:mysql   -p 30001:5290   -p 30002:8080 -p 30003:5222   tigase/tigase-xmpp-server ##啟動tigase-server           

然後通路 http://ip:port 進去setup界面,賬号admin 密碼tigase

「網絡」使用tigase-server搭建私有聊天伺服器
「網絡」使用tigase-server搭建私有聊天伺服器
「網絡」使用tigase-server搭建私有聊天伺服器
「網絡」使用tigase-server搭建私有聊天伺服器

然後一直下一步,最後重新開機tigase-server

然後再次進去系統

「網絡」使用tigase-server搭建私有聊天伺服器

建立虛拟域

「網絡」使用tigase-server搭建私有聊天伺服器

三、配置TLS證書

這裡直接使用openssl來生成證書

openssl req -nodes -new -newkey rsa:2048 -keyout qhliao.im.key -out qhliao.im.csr           

這一步會讓你輸入一個密碼,一定要記住這個密碼,并且common name 是你虛拟域的名字,比如我這個就是qhliao.im

openssl x509 -req -days 365 -in qhliao.im.csr -signkey qhliao.im.key -out qhliao.im.crt
cat qhliao.im.crt  qhliao.im.key > qhliao.im.pem           

轉換為pkcs12

openssl pkcs12 -export -out qhliao.im.p12 -inkey qhliao.im.key -in qhliao.im.crt           

轉換為jks

keytool -importkeystore -srckeystore qhliao.im.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore qhliao.im.jks           

然後把 qhliao.im.pem檔案複制到 tigase-server目錄裡面的 certs裡面 docker的話執行下面指令

docker cp qhliao.im.pem tigase-server:/home/tigase/tigase-server/certs           

然後重新開機tigase

docker restart tigase-server           

至此伺服器配置好了,下面開始用戶端連接配接,這裡示範Smack連接配接伺服器 和 Spark用戶端連接配接伺服器

四、Smack連接配接

首先導入maven依賴

<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-java8</artifactId>
    <version>4.4.0</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-tcp</artifactId>
    <version>4.4.0</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-im</artifactId>
    <version>4.4.0</version>
</dependency>
<dependency>
    <groupId>org.igniterealtime.smack</groupId>
    <artifactId>smack-extensions</artifactId>
    <version>4.4.0</version>
</dependency>           

把剛剛生成的證書 qhliao.im.jks類型的複制到項目的根目錄 然後代碼

public static AbstractXMPPConnection connection() {
    try {
        SSLContext ctx = SSLContext.getInstance("SSL");
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
        KeyStore tks = KeyStore.getInstance("JKS");
        tks.load(XmppTest.class.getResourceAsStream("/qhliao.im.jks"), "你剛剛的密碼".toCharArray());
        tmf.init(tks);
        ctx.init(null, tmf.getTrustManagers(), null);
        XMPPTCPConnectionConfiguration configuration = XMPPTCPConnectionConfiguration.builder()
                .setHost("ip").setPort(30003)
                .setXmppDomain("qhliao.im")
                .setSendPresence(true)
                .setCompressionEnabled(false)
                .setSslContextFactory(() -> ctx)
                .setSecurityMode(ConnectionConfiguration.SecurityMode.required)
                .setResource("Smack")
                .setCustomX509TrustManager(new X509TrustManager() {
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                    public void checkClientTrusted(
                            java.security.cert.X509Certificate[] certs, String authType) {
                    }
                    public void checkServerTrusted(
                            java.security.cert.X509Certificate[] certs, String authType) {
                    }
                })
                .build();
        XMPPTCPConnection xmppConnection = new XMPPTCPConnection(configuration);
        xmppConnection.connect();
        return xmppConnection;
    } catch (Exception e) {
        log.error("連結失敗");
        log.error(ExceptionUtils.getStackTrace(e));
    }
    return null;
}           

然後連接配接

AbstractXMPPConnection connection = connection();
try {
    if (connection != null && connection.isConnected()) {
        connection.login("langshi", "langshi");
    }
} catch (Exception e) {
    log.error("報錯啊拉啊啊");
    log.error(ExceptionUtils.getStackTrace(e));
    connection.disconnect();
}           

五、使用Spark連接配接 首先下載下傳Spark xmpp.org/software/cl…

「網絡」使用tigase-server搭建私有聊天伺服器

為Spark安裝證書

「網絡」使用tigase-server搭建私有聊天伺服器
「網絡」使用tigase-server搭建私有聊天伺服器

選擇剛剛生成的 qhliao.im.crt 新增 然後 确定儲存, 如果沒有配置域名 則需要

「網絡」使用tigase-server搭建私有聊天伺服器

然後儲存 建立賬号

「網絡」使用tigase-server搭建私有聊天伺服器

最後就可以登入了

「網絡」使用tigase-server搭建私有聊天伺服器

文章來源:https://juejin.cn/post/6992899508694859783

繼續閱讀