XMPP使用TLS和auth登录
来源:互联网 发布:java员工薪资管理 编辑:程序博客网 时间:2024/05/17 08:50
SASL(Simple Authentication and Security Layer)
TLS(Transport Layer Security)
TCP
IP
110客户端 spark2.6.3
116服务端 openfire3.9.1
一、登录
1. 110->116 <stream:stream xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
to="192.168.20.116"
version="1.0" >
2. 116->110 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="hiterminalsvn"
id="c41f9b17"
xml:lang="en"
version="1.0">
3. 116->110 <stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls> //如果服务端开启了TLS才会有此项
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"> //验证机制
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth"/>
<register xmlns="http://jabber.org/features/iq-register"/>
</stream:features>
4. 110->116 <starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" /> //3中有starttls才会有4和5,TLS协商
5. 116->110 <proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls"/> //tls握手成功,server通知client可继续运行,之后的数据均已加密(openfire默认是开启TLS的,如果想看到后面的包,可以在openfire控制台 -> Server -> Server Settings -> Security Settings -> Client Connection Settings里的Custom -> TLS method选择Not Available)。
说明:
a. DIGEST-MD5:如果帐号和密码都在Client对象中提供了,这种机制是首选,即使没有TLS加密也是安全的。
b. PLAIN:如果DIGEST-MD5无效,就使用此种机制。在没有TLS加密时是不安全的。
c. ANONYMOUS:此种机制在没有提供帐号和密码时使用。服务器将随机产生临时帐号和资源,提供限制的有效服务。
d. EXTERNAL:此种机制目前只对客户端提供了证书和保密关键字(private key)而有效,服务器试图通过外部计算出客户端。举例来说,使用提供的证书或IP地址。
6(加密). 5成功的话,客户端初始化一个新stream给服务端
110->116 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
to="192.168.20.116"
version="1.0" >
7(加密). 116->110 <stream:stream
xmlns:stream="http://etherx.jabber.org/streams"
xmlns="jabber:client"
from="hiterminalsvn"
id="c41f9b17"
xml:lang="en"
version="1.0" >
<stream:features
xmlns:stream="http://etherx.jabber.org/streams">
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
<mechanism>CRAM-MD5</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth" />
<register xmlns="http://jabber.org/features/iq-register" />
</stream:features>
8(加密). 110->116 <auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AGNpY2lvZmZpY2UAMTIz</auth> //客户端选择一个验证机制,这里选的是PLAIN
9(加密). 116->110 <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> SASL握手成功
如果选择DIGEST-MD5验证机制,8、9项会由以下4项代替
8. 110->116 <auth mechanism="DIGEST-MD5" xmlns="urn:ietf:params:xml:ns:xmpp-sasl" /> //客户端选择digest-md5认证
9. 116->110 <challenge xmlns="urn:ietf:params:xml:ns:xmpp-sasl">cmVhbG09ImhpdGVybWluYWxzdm4iLG5vbmNlPSJ6V0tZRzgzSDlFNXJBaVE1THpMUVB4WmxFbFFaSDE3ZXVBb0xWbk1yIixxb3A9ImF1dGgiLGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNz</challenge> //服务器发送一个[BASE64]编码的challenge给客户端
10. 110->116 <response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">dXNlcm5hbWU9ImNpY2lvZmZpY2UiLHJlYWxtPSJoaXRlcm1pbmFsc3ZuIixub25jZT0ieldLWUc4M0g5RTVyQWlRNUx6TFFQeFpsRWxRWkgxN2V1QW9MVm5NciIsY25vbmNlPSJhMWEwZjFhODYxZmFlN2YxMWI3NjU0MTA3MDg4M2EzNDE3ZTExOWNiNmY3OTI2NzdjNjRiOTVjNGZkY2ZiZDQzIixuYz0wMDAwMDAwMSxxb3A9YXV0aCxkaWdlc3QtdXJpPSJ4bXBwLzE5Mi4xNjguMjAuMTE2IixjaGFyc2V0PXV0Zi04LHJlc3BvbnNlPTBmODg1YWM4MzdkMjA3YzEzMmUyMmFmODEzOWM1ZGEw</response>
11. 116->110 <success xmlns="urn:ietf:params:xml:ns:xmpp-sasl">cnNwYXV0aD1jZmM1MzVkOTdiNzY0MDhhNmY0Y2Y3NGM3MmFkZTg5NA==</success>
11(alt). 失败的话返回failure并关闭stream
116->110 <failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<not-authorized />
</failure>
- XMPP使用TLS和auth登录
- XMPP使用tls 和sasl登录
- XMPP使用tls 和sasl登录
- XMPP-安全验证tls 和sasl(二)
- XMPP-TLS和SASL握手
- XMPP使用简介--登录
- Laravel5.3使用auth登录验证
- TLS 配置和使用
- xmpp-iOS-注册和登录
- XMPP完成注册和登录
- 安卓之使用BASIC AUTH进行登录验证
- Django auth登录
- Laravel- Auth登录验证
- Laravel多用户Auth登录
- laravel auth 登录
- XMPP登录
- XMPP协议TLS、SASL、资源绑定和服务器回调详细流程
- Mac下使用XMPP即时通讯【2】:安装XMPP和Spark
- 应该有新的编程起点
- STL 智能指针
- 阿里比赛排名获取
- 大整数求和
- php 将csv文件内容导入数据库时值为空的解决
- XMPP使用TLS和auth登录
- Java数据库连接-JNDI方式- 配置Tomcat6.0 连接池
- hdu 1017 A Mathematical Curiosity(水题)
- 【游戏课】技术片段之——四元数与旋转矩阵的关系
- JAVA中continue的用法例子
- Multiple Instance Learning
- Android WifiDisplay分析一:相关Service的启动
- CMapStringToString
- 糗爆了,糗的放光芒.