带有 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内实现,大家可以去看看。
如何通过 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内实现,大家可以去看看。