【问题标题】:Strophe Unrecoverable TLS errorStrophe 不可恢复的 TLS 错误
【发布时间】:2014-02-19 09:21:01
【问题描述】:

我正在使用 libstrophe 用 C 语言开发一个简单的 ejabberd 客户端。它连接并开始按应有的方式处理消息。

但是,过了一会儿(在来自 ejabberd 服务器的两到三个 ping 之后),我的连接关闭并且状态设置为 DISCONNECTED。以下是调试行的尾部:

xmpp DEBUG Unrecoverable TLS error, 5. 
xmpp DEBUG Closing socket.
DEBUG: disconnected event DEBUG Stopping event loop. 
event DEBUG Event
oop completed.

我初始化并连接如下。

xmpp_initialize();

/* read connection params */
if( set_xmpp_conn_params( &conn_params ) < 0 ) {
    fprintf(stderr, "Could not retrieve connection params from %s\n", 
                    SERVER_CONF_FILE);
    return -1;
}

/* initialize the XMPP logger */
xmpp_log = xmpp_get_default_logger(XMPP_LOG_LEVEL);
xmpp_ctx = xmpp_ctx_new(NULL, xmpp_log);

/* create a connection */
xmpp_conn = xmpp_conn_new(xmpp_ctx);

/* login */
xmpp_conn_set_jid(xmpp_conn, conn_params.jid);
xmpp_conn_set_pass(xmpp_conn, conn_params.password);

/* create a client */
xmpp_connect_client(    xmpp_conn, conn_params.host, 0, 
                        agent_conn_handler, xmpp_ctx );

/* enter the event loop */
xmpp_run( xmpp_ctx );

/*  the code below is executed 
    whenever connection handler @agent_conn_handler exits */

/* release the connection and context */
xmpp_conn_release(xmpp_conn);
xmpp_ctx_free(xmpp_ctx);

为什么我会收到 TLS 错误消息?

谢谢。

【问题讨论】:

  • 您是否使用 openssl、gnutls 或 schannel 进行 TLS?
  • 是的,我正在使用openssl

标签: ssl xmpp ejabberd libstrophe


【解决方案1】:

错误 5 是 SSL_ERROR_SYSCALL。 OpenSSL docs 说:

发生了一些 I/O 错误。 OpenSSL 错误队列可能包含更多 有关错误的信息。如果错误队列为空(即 ERR_get_error() 返回 0),ret 可用于了解更多关于 错误:如果 ret == 0,则观察到违反协议的 EOF。如果 ret == -1,底层 BIO 报告了一个 I/O 错误(对于 socket I/O on Unix系统,详情请咨询errno)。

实际上,这可能意味着服务器出于某种原因断开了您的连接。我建议使用WireShark 进行数据包跟踪以获取更多信息。例如,当客户端提供 TLS 1.1 版时,我们已经看到使用 TLS 的 RSA 库的服务器发生这种情况。

【讨论】:

  • 当我查看 Wireshark 时,在断开连接之前,客户端首先向服务器发送一个[FIN, ACK] 数据包,然后从服务器接收一个 RST。你是如何解决你的案子的?
  • 在客户端发送 FIN/ACK 之前,服务器是否发送了 FIN?此外,将流解码为 SSL,并查看最后一条 SSL 消息是什么。在我们看到的案例中,我们不得不强制客户端使用 TLS 1.0,直到我们替换了服务器上的 RSA 库。
  • 嗨,我正在创建一个使用 libstrophe 作为 XMPP 客户端的应用程序,您是否碰巧遇到过“无法恢复的 TLS 错误,6”。 ?
猜你喜欢
  • 1970-01-01
  • 2011-02-06
  • 2022-01-21
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 2018-04-11
相关资源
最近更新 更多