带有TLS实现的XMPP

时间:2019-04-16 21:11:54

标签: php xml ssl xmpp starttls

如何通过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>来关闭流?

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。我的错误是,在拿到<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=.....

之后,您将获得有关如何进行身份验证(即普通)的“真实”答复。

所有功能都在my library内实现,因此您可以查看一下。