XMPP 与 TLS 实现
Posted
技术标签:
【中文标题】XMPP 与 TLS 实现【英文标题】:XMPP with TLS implementation 【发布时间】:2019-04-16 21:11:54 【问题描述】:如何通过 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】:我已经找到了问题的解决方案。我的错误是,在获得<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)。
这一切都在my library 中实现,所以你可以看看。
【讨论】:
以上是关于XMPP 与 TLS 实现的主要内容,如果未能解决你的问题,请参考以下文章
如何在 java 中使用 Smack XMPP 库处理 TLS 证书