带有 TLS 实现的 XMPP

XMPP with TLS implementation

如何通过 TLS 连接到 XMPP 服务器?我已经阅读了这本书和关于它的 RFC 文档,并且说明在高度概述中很清楚,但我缺少细节。

我正在构建我的 own XMPP library,一旦我在端口 5222 上打开到客户端的套接字,我将发送初始 XML 以开始对话,然后是:

<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

服务器响应:

<proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>

在此之后我不清楚我应该做什么,因为据说 TLS 魔术应该在这里发生,让服务器将证书发送给客户端。这是如何完成的,我怎么知道它已收到?

在那之后文档说流应该终止,另一个流开始...这是否意味着我需要断开套接字或只是通过发送 </stream:stream> 关闭流?

我找到了解决问题的方法。我的错误是,在我得到 <proceed> 之后,我关闭了套接字以便将其切换到端口 443、更改协议和其他类似的东西。

解决方案不是关闭连接,而是使用以下方法在现有连接上启用加密:

stream_socket_enable_crypto($this->socket->connection, 
                            true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT);

然后再次打开与

的通讯
<?xml version='1.0' encoding='UTF-8'?>
<stream:stream to=.....

之后,您将收到关于如何进行身份验证(即 PLAIN)的 "real" 响应。

全部在my library内实现,大家可以去看看。