如何通过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魔术应该在这里发生,让服务器将证书发送给客户端。这是怎么做的,我怎么知道它是被接收到的?
在那之后,文档说流应该终止,还有一个started...does,这意味着我需要断开套接字的连接,或者只是通过发送</stream:stream>来关闭流
发布于 2019-04-23 23:04:24
我已经找到了解决这个问题的办法。我的错误是,在获得<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中实现的,因此您可以查看它。
https://stackoverflow.com/questions/55716672
复制相似问题