`

SASL的使用

    博客分类:
  • XMPP
 
阅读更多

1.使用规则:

    1.如果SASL协商发生在两台服务器之间,除非服务器宣称的DNS主机名得到解析,不能进行通信。

    2.如果初始化实体有能力使用 SASL 协商, 它必须在初始化流的头信息中包含一个值为"1.0"的属性'version'

    3.通过'urn:ietf:params:xml:ns:xmpp-sasl'名字空间中的<mechanisms/>元素声明一个或多个验证机制。

    4.当 SASL 协商时, 一个实体不能在流的根元素中发送任何空格符号作为分隔符。

    5.当SASL握手时,在XML元素中使用的任何 XML 字符数据必须被编码成 base64, 编码遵循 RFC 3548 第三章的规定。

 

2.SASL定义

service name(服务名): "xmpp"

 

initiation sequence(开始序列): 当初始化实体提供一个打开的XML流头信息并且接收实体善意回应之后,接收实体提供一个可接受的验证方法清单。初始化实体从这个清单中选择一个方法,把它作为 <auth/> 元素的 'mechanism' 属性的值发送给接收实体,也可以选择发送一个初始化应答以避免循环。

 

exchange sequence(交换序列): 挑战和回应的交换,从接收实体发送给初始化实体的 <challenge/> 元素和从初始化实体发送给接收实体的 <response/> 元素信息。接收实体通过发送 <failure/>元素报告失败,发送<success/>元素报告成功;初始化实体通过发送<abort/> 元素中止交换。成功的协商之后,两边都认为原来的XML流已经关闭并且都开始发送新的流头信息。

 

security layer negotiation(安全层协商): 安全层在接收实体发送 <success/> 元素的关闭字符">"之后立刻生效,在初始化实体发送 <success/> 元素的关闭字符">"之后也立刻生效。层的顺序是 \[TCP\]\[TLS\],然后是 \[SASL\],然后是 \[XMPP\]

 

use of the authorization identity(授权ID的使用): 授权ID可在xmpp中用于表示一个客户端的非缺省的<node@domain>,或一个服务器的<domain>

 

3.SASL 错误

<aborted/> -- 接收实体认可由初始化实体发送的<abort/>元素;在回应一个<abort/>元素时发送。

 

<incorrect-encoding/> -- 由初始化实体提供的数据无法处理,因为[BASE64]编码不正确(例如,因为编码不符合[BASE64]的第三章); 在回应一个包含初始化响应数据的<response/> 元素或<auth/>元素时发送.

 

<invalid-authzid/> -- 由初始化实体提供的授权id是非法的,因为它的格式不正确或初始化实体无权给那个ID授权;在回应一个包含初始化响应数据的<response/> 元素或<auth/>元素时发送。

 

<invalid-mechanism/> -- 初始化实体不能提供一个机制活、或请求一个不被接受实体支持的机制;在回应一个<auth/>元素时发送。

 

<mechanism-too-weak/> -- 初始化实体请求的机制比服务器策略对它的要求弱;在回应一个包含初始化响应数据的<response/> 元素或<auth/>元素时发送。

 

<not-authorized/> -- 验证失败,因为初始化实体没有提供合法的credentials(这包括但不限于未知用户名等情形);在回应一个包含初始化响应数据的<response/> 元素或<auth/>元素时发送。

<temporary-auth-failure/> -- 验证失败,因为接收实体出现了临时的错误;在回应一个<response/> 元素或<auth/>元素时发送。

 

4.实例

客户端--服务器

客户端向服务器发送初始化流

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>

服务器响应并返回可用的验证机制(清单)

   <stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_234'
    from='example.com'
    version='1.0'>
 <stream:features>
  <mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
    <mechanism>DIGEST-MD5</mechanism>
    <mechanism>PLAIN</mechanism>
  </mechanisms>
</stream:features>

客户端选择一个机制

<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'
      mechanism='DIGEST-MD5'/>

此处有两种可能:

成功

服务器返回一个BASE64的挑战

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
cmVhbG09InNvbWVyZWFsbSIsbm9uY2U9Ik9BNk1HOXRFUUdtMmhoIixxb3A9ImF1dGgi
LGNoYXJzZXQ9dXRmLTgsYWxnb3JpdGhtPW1kNS1zZXNzCg==
</challenge>

解码后的挑战信息是:

realm="somerealm",nonce="OA6MG9tEQGm2hh",\
qop="auth",charset=utf-8,algorithm=md5-sess

失败

服务器返回一个错误给客户端

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<incorrect-encoding/>
</failure>
</stream:stream>

 

继续

客户端返回一个response到服务器(也是BASE64)

<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
dXNlcm5hbWU9InNvbWVub2RlIixyZWFsbT0ic29tZXJlYWxtIixub25jZT0i
T0E2TUc5dEVRR20yaGgiLGNub25jZT0iT0E2TUhYaDZWcVRyUmsiLG5jPTAw
MDAwMDAxLHFvcD1hdXRoLGRpZ2VzdC11cmk9InhtcHAvZXhhbXBsZS5jb20i
LHJlc3BvbnNlPWQzODhkYWQ5MGQ0YmJkNzYwYTE1MjMyMWYyMTQzYWY3LGNo
YXJzZXQ9dXRmLTgK
</response>

解码后的response内容是

username="somenode",realm="somerealm",\
nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",\
nc=00000001,qop=auth,digest-uri="xmpp/example.com",\
response=d388dad90d4bbd760a152321f2143af7,charset=utf-8

 

此处有两种可能

服务器判断response有效

在发送一个challenge给客户端

<challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
cnNwYXV0aD1lYTQwZjYwMzM1YzQyN2I1NTI3Yjg0ZGJhYmNkZmZmZAo=
</challenge>

编码后是

 rspauth=ea40f60335c427b5527b84dbabcdfffd

服务器判断response无效

返回一个错误信息

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
<temporary-auth-failure/>
</failure>
</stream:stream>

 

继续

此处有两种可能

客户端接受挑战

   <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

客户端不接受挑战,放弃协商

<abort xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

 

服务器通知客户端验证成功

 <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>

或验证失败

  <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
  <temporary-auth-failure/>
</failure>
</stream:stream>

如果是客户端终止协商 (abort)

<failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>
  <aborted/>
</failure>
</stream:stream>

 

继续

客户端重新发送一个初始化流到服务器

  <stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    to='example.com'
    version='1.0'>

服务器相应客户端并附上feature

<stream:stream
    xmlns='jabber:client'
    xmlns:stream='http://etherx.jabber.org/streams'
    id='c2s_345'
    from='example.com'
    version='1.0'>
<stream:features>
  <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
  <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>
</stream:features>

服务器--服务器相似

分享到:
评论

相关推荐

    使用sasl的kafka集群的搭建使用

    Kafka集群搭建和使用过程涉及多个技术要点和配置项,包括SASL安全机制、ACL权限设置、Kafka基础概念以及安装配置步骤等。下面将详细介绍这些知识点。 首先,SASL(Simple Authentication and Security Layer)是为C...

    sasl安装whl文件.rar

    在Python中与Hive进行交互时,可能会遇到身份验证问题,这时就需要使用SASL(Simple Authentication and Security Layer)库来处理安全认证。 标题中的“sasl安装whl文件.rar”指示了我们需要安装SASL库的一个特定...

    cyrus-sasl-2.1.22 源码,使用VS2005编译,支持w32以及x64版本

    5. **调试支持**:由于描述中提到已配置好项目可调试,这意味着你可以直接使用VS2005的调试工具进行源码级别的调试,这对于理解库的工作原理和查找潜在问题非常有用。 6. **测试与验证**:编译完成后,你需要运行库...

    thrift_sasl-0.3.0.tar.gz

    7. **部署与集成**:了解如何在实际环境中部署Thrift SASL,包括设置SASL配置文件、配置Thrift服务以使用SASL以及客户端的适配,是使用此库的关键步骤。 8. **测试与调试**:在生产环境中使用Thrift SASL时,进行...

    svn 服务器+sasl认证在ubuntu 10.04安装文档

    3. **安装SASL2二进制工具:** 使用`sudo apt-get install sasl2-bin`命令安装SASL2二进制工具,这些工具可以帮助管理密码文件等。 #### 小结 通过以上步骤,你可以在Ubuntu 10.04上成功地安装和配置带有SASL认证...

    svn+ldap+sasl认证(svn通过ldap用户进行认证登陆)

    svn+ldap+sasl 认证是指在 svn 服务器中使用 ldap 服务器进行用户认证,实现 svn 服务器的安全认证机制。ldap 服务器是一个目录服务,用于存储和管理用户信息,sasl 则是一个安全认证协议,用于在客户端和服务器之间...

    cyrus-sasl-2.1.23

    Cyrus SASL(Simple Authentication and Security Layer)是开源软件,用于在各种网络协议中实现认证和授权。这个源码包“cyrus-sasl-2.1.23”是一个特定版本的Cyrus SASL库,允许开发者在他们的应用中集成安全的...

    cyrus-sasl-2.1.21.tar.gz

    Cyrus SASL(Simple Authentication and Security Layer)是用于提供认证和授权服务的开源库,主要应用于各种网络协议,如SMTP、IMAP、POP3等。Cyrus SASL 2.1.21是该库的一个特定版本,用于增强邮件系统中的安全...

    SASL基本说明文档

    - **CRAM-MD5**:使用MD5散列值进行密码验证,提高了安全性。 - **DIGEST-MD5**:通过计算MD5摘要进行认证,支持双向验证,是较为安全的选择之一。 在不同的组件和服务中,可以采用不同的认证机制,例如在LDAP...

    PyPI 官网下载 | pure-sasl-0.1.5.tar.gz

    安装完成后,开发者可以在自己的Python项目中通过`import pure_sasl`来使用这个库,实现SASL协议相关的功能,比如在与ZooKeeper或其他支持SASL的系统交互时进行安全认证。如果需要调试或了解库的具体用法,可以查阅`...

    Android代码-android-sasl

    This is a SASL stack for Android platform, adapted from GNU Classpath source. Intended for Smack, might prove useful for something else. As neither java nor javax namespace can be modified, javax....

    sasl-0.2.1-cp35-cp35m-win_amd64.zip

    SASL,全称为Simple Authentication and ...通过使用提供的wheel包,Windows用户可以在Python 3.5环境中快速且方便地安装和使用SASL。确保正确配置和使用SASL,可以极大地增强你的应用在处理敏感数据时的安全性。

    sasl library学习

    - **PLAIN**:直接使用 sasl_checkpass() 函数进行密码检查。 - **auxprop**:利用辅助属性服务来查询用户密码,通常存储在 /etc/sasldb2 文件中。 - **saslauthd**:通过 saslauthd 守护进程来进行用户认证,可以...

    oslo_cache增加SASL安全认证代码

    SASL(Simple Authentication and Security Layer,简单认证与安全层)是一种广泛使用的协议,它允许应用程序添加认证和加密功能到现有的协议中,以增强安全性。在这个场景中,我们将讨论如何在oslo_cache这个Python...

    sasl-0.2.1-cp36-cp36m-win_amd64.whl

    sasl的whl文件,sasl安装不上,利用sasl的whl文件安装。适合python3.6,64位。

    cyrus-sasl-2.1.22.tar.gz

    在实际应用中,Cyrus SASL 可以与其他邮件服务器软件(如 Cyrus IMAP 服务器或 Postfix 邮件传输代理)结合使用,以提供完整的邮件服务解决方案。同时,它也可以与其他网络服务(如 LDAP 或数据库)集成,以获取更...

    sasl-0.3.1-cp39-cp39-win-amd64

    win-sasl-0.3.1-cp39-cp39-win_amd64,sasl-0.3.1-cp39-cp39-win_amd64

    cyrus-sasl-plain-2.1.26-20

    cyrus-sasl-plain-2.1.26-20,用于安装sasl。

    Python库 | sasl3-0.2.8.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:sasl3-0.2.8.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    sasl-0.2.1-cp36-cp36m-win32.whl

    sasl的whl文件,sasl安装不上,利用sasl的whl文件安装。适合python3.6,32位。

Global site tag (gtag.js) - Google Analytics