php - 带有 TLS 实现的 XMPP

标签 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> 关闭流?

最佳答案

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

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

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

然后再次打开通讯

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

之后,您将收到有关如何进行身份验证的“真实”响应(即 PLAIN)。

全部在my library内实现所以你可以检查一下。

关于php - 带有 TLS 实现的 XMPP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55716672/

相关文章:

php - Codeigniter $this->input->post() 为空而 $_POST 正常工作

javascript - 如何将 E4X XML 元素转换为 JSON 表示法

xml - LIBXML2 : Suppress the debug output on console

python - 在Python中获取或构建PEM证书链

java - 可以在 Java 中基于 JSSE 的 SSL 套接字上并行执行读/写吗?

php - 开发强大的应用程序

php - IOS-如何通过php实现应用程序自动登录的 session

mysql - 带 SSL 的 Wildfly mysql

php - Laravel Mix 和 alpine 3.14 权限错误

android - 如何在 Nativescript 中设置按钮的边框半径?