`

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...

    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....

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

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

    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...

    cyrus-sasl-2.1.22.tar.gz

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

    sasl-0.2.1-cp36-cp36m-win_amd64.whl

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

    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