一、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
然後再次進去系統
建立虛拟域
三、配置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…
為Spark安裝證書
選擇剛剛生成的 qhliao.im.crt 新增 然後 确定儲存, 如果沒有配置域名 則需要
然後儲存 建立賬号
最後就可以登入了
文章來源:https://juejin.cn/post/6992899508694859783