Java 哈瓦·贾伯机器人。带TLS的smack 4.2.0上的XMPP

Java 哈瓦·贾伯机器人。带TLS的smack 4.2.0上的XMPP,java,xmpp,smack,Java,Xmpp,Smack,我需要开发迷你jabber机器人。我有一个只有TLS连接规则的openfire服务器。我曾尝试连接到4.2.0版本,但有一个例外: 代码: 日志: 10:35:31上午发送(0): 上午10:35:31 RECV(0): 上午10:35:32 RECV(0):平原 上午10:35:32发送(0): 上午10:35:32录制(0): 线程“main”org.jivesoftware.smack.SmackException中的异常:javax.net.ssl.SSLHandshakeExcepti

我需要开发迷你jabber机器人。我有一个只有TLS连接规则的openfire服务器。我曾尝试连接到4.2.0版本,但有一个例外: 代码:

日志:

10:35:31上午发送(0):
上午10:35:31 RECV(0):
上午10:35:32 RECV(0):平原
上午10:35:32发送(0):
上午10:35:32录制(0):
线程“main”org.jivesoftware.smack.SmackException中的异常:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效认证路径
位于org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1010)
在org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
位于org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
运行(Thread.java:745)

我使用Pidgin并建立了与服务器的连接。我需要向代码中添加什么来支持TLS Authenticate?

您的服务器似乎没有“有效”证书。购买有效的证书,或将库配置为允许使用“不受信任”的证书。

可能存在重复的证书
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                .setUsernameAndPassword("testjava", "12345678")
                .setServiceName(server)
                .setPort(5222)
                .setHost(server)                    .setSecurityMode(ConnectionConfiguration.SecurityMode.required)
                .setDebuggerEnabled(true)
                .build();

        AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);

        conn2.connect();
10:35:31 AM SENT (0): <stream:stream xmlns='jabber:client' to='***.pro' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='testjava@***.pro' xml:lang='en'>
10:35:31 AM RECV (0): <?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="***.pro" id="xb9bamjxw" xml:lang="en" version="1.0">
10:35:32 AM RECV (0): <stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism></mechanisms></stream:features>
10:35:32 AM SENT (0): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'></starttls>
10:35:32 AM RECV (0): <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
Exception in thread "main" org.jivesoftware.smack.SmackException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1010)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
    at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
    at java.lang.Thread.run(Thread.java:745)