物联网安全协议之XMPP浅析
程序员文章站
2022-07-14 09:04:38
...
XMPP:可扩展消息处理现场协议,是一种基于XML流的用于即时通讯(IM)的协议,其间有三种角色,客户端,服务器和网关,通信可以在三者之间任意两个发生,前面两个好理解,而网关是为了处理其他异构系统即不使用XMPP协议的系统,比如MSN,SMS等,网关可以转换不同的协议,来达到交流互通作用。客户端与服务器是基于TCP/IP协议来建立连接,在上面传输XML文档。
由图可知,客户端之间无法直接交流,同时服务器允许多个客户端同时连接。客户端通过端口5222连接服务器,服务器之间通过5269互相通信。
XMPP可用于异步通信,这也就表明了在客户端和服务器之间存在两条XML流和一条TCP链路,服务器之间需要两条TCP链路来传输对端数据。
XML流会以标记开始,标记结束,客户端服务器之间可能每次只发送一个XML片段或者完整的。stream标记的属性如下:
to只能用于从客户端到服务器的XML流中。
from只能用于从服务器到客户端的XML流中。
id只能用于从接收实体到发送实体的XML流中,id必须唯一,用于标记会话。
xml:lang只能用于发起方,用于约定语言。如发起方没有携带xml:lang属性,接收方应使用默认语言。
version至少在“1.0”以上。
C: <?xml version='1.0'?>
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
S: <?xml version='1.0'?>
<stream:stream
from='example.com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
... encryption, authentication, and resource binding ...
C: <message from='aaa@qq.com'
to='aaa@qq.com'
xml:lang='en'>
C: <body>Art thou not Romeo, and a Montague?</body>
C: </message>
S: <message from='aaa@qq.com'
to='aaa@qq.com'
xml:lang='en'>
S: <body>Neither, fair saint, if either thee dislike.</body>
S: </message>
C: </stream:stream>
S: </stream:stream>
建立会话时,会先以TLS(安全传输层协议)建立一个安全链路,成功后再用SASL(简单认证和安全层协议)进行身份认证,之后绑定资源开始传输XML流。
TLS原理:利用非对称加密演算来对通信方做身份认证,之后交换对称**作为会谈**,就用此**来加密传输信息。
上一篇: Python 实现性能自动化测试
推荐阅读