You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发一对一聊天App遇SSL/TLS报错:服务器要求但客户端未启用

问题诊断与修复方案

从你的日志和代码来看,问题根源非常清晰:你的ejabberd服务器强制要求使用SSL/TLS加密连接,但客户端代码里主动禁用了安全加密模式,导致连接被服务器拒绝。

关键问题点

  1. 日志里服务器明确返回了强制TLS的标识:

stream:features</stream:features>

  1. 你的客户端配置里硬编码禁用了安全模式:
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)

修复步骤

只需要修改客户端的安全模式配置,适配服务器的强制加密要求,有两种推荐方式:

方式一:强制启用TLS(最匹配服务器要求)

将安全模式改为required,客户端会自动发起TLS握手,符合服务器的强制加密规则:

// 替换原来的disabled配置
config.setSecurityMode(ConnectionConfiguration.SecurityMode.required)

方式二:自动协商模式(兼容更多场景)

如果未来服务器可能调整为可选加密,也可以设置为ifpossible,客户端会自动检测服务器是否要求加密并适配:

config.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible)

额外注意事项(测试环境专属)

如果你的ejabberd使用的是自签名证书(测试环境常见),修改后可能会遇到证书验证失败的问题,你可以临时添加以下配置跳过证书验证(生产环境禁止使用):

// 临时跳过证书验证(仅测试用)
config.setHostnameVerifier { _, _ -> true }
config.setCustomSSLContext(SSLContext.getDefault())

另外,也可以考虑直接使用ejabberd的加密专用端口5223,修改客户端的端口配置即可:

config.setPort(5223)

修改完成后重新启动服务,应该就能正常建立加密连接并完成登录了。

内容的提问来源于stack exchange,提问作者Amit Ranjan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 06:38:18