SASL讲解,以及在Spark中的应用

2019-07-13 07:38发布

class="markdown_views prism-atom-one-light">

是什么?

  SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。
  
  SASL提供了一个通用的方法为基于连接的协议增加验证支持,而XMPP使用了一个普通的XML名字空间来满足SASL的需要。

演化

比如我们登录一个网站,需要输入用户名密码,这些需要我们手动输入。但是分布式系统中,每台机器是互相隔离,需要互相联通,互相操作。比如我们有三台机器需要做成分布式系统。 192.168.10.100 =》 手动 输入用户名 密码 =》修改spark/conf文件,添加as = bb 192.168.10.101 =》 手动 输入用户名 密码 =》修改spark/conf文件,添加as = bb 192.168.10.102 =》 手动 输入用户名 密码 =》修改spark/conf文件,添加as = bb ......... 192.168.10.122 =》 手动 输入用户名 密码 =》修改spark/conf文件,添加as = bb 这样如果是1000个节点集群,每次都要自己输入,岂不是要累死了。所以需要一种机器自动输入用户名和密码来登录验证。 假设发送的是这样子的 192.168.10.123:8080//myweb/login?ip=192.168.10.121&user=lcc&password=123456 每次需要操作另外的电脑的时候,意思我本机是192.168.10.121登录192.168.10.123这台电脑,传递的用户名是lcc,密码是123456。 这样就实现了免登录了,但是如果有个黑客截获了这条消息,你就惨了,一看就知道怎么登陆你的机器。 我擦,这还有什么意思? 因此演化成 192.168.10.123:8080//myweb/login?ip=192.168.10.121&user=lcc&password=asjfgsjakhgkralhnjhhbdkjfsgjhdsjkahfalw password被MD5加密了。xml的格式如下 文本格式,非加密模式 <iq type='set' id='auth2'> <query xmlns='jabber:iq:auth'> <username>billusername> <password>Calli0pepassword> <resource>globeresource> query> iq> 加密模式 <iq type='set' id='auth2'> <query xmlns='jabber:iq:auth'> <username>billusername> <digest>48fc78be9ec8f86d8ce1c39c320c97c21d62334ddigest> <resource>globeresource> query> iq> 这样的实现有:ssh,sftp等等

小结:

SASL是提供一种用户身份认证机制, 你可以简单认为是用来认证用户的账号/密码是否运行进入系统或者使用系统的服务. 一般较长使用digest-md5, 该种机制下, 密码可以不用明文在网络上传输, 也就不用怕密码被窃听. 当你设定sasl时,你必须决定两件事;一是用于交换“标识信 息”(或称身份证书)的验证机制;一是决定标识信息存储方法的验证架构。 如果客户端能成功通过验证,服务器端就能确定用户的身份, 并借此决定用户具有怎样的权限。 比较常见的机制; 4.1 plain(较常用)
plain是最简单的机制,但同时也是最危险的机制,因为身份证书(登录名称与密码)是以base64字符串格式通过网络,没有任何加密保护措施。因此,使用plain机制时,你可能会想要结合tls。
4.2 login
login不是其正式支持的机制,但某些旧版的mua使用这种机制,所以cyrus sasl让你可选择其是否支持login机制。如果你的用户仍在使用这类老掉牙的mua,你必须在编译sasl函数库时,指定要包含login的支持。 login的证书交换过程类似plain。
4.3 otp
otp是一种使用“单次密码”的验证机制。此机制不提供任何加密保护,因为没必要--每个密码都只能使用一次,每次联机都要改用新密码。smto client必须能够产生otp证书。
4.4 digest-md5(较常用)
使用这种机制时,client与server共享同一个隐性密码,而且此密码不通过网络传输。验证过程是从服务器先提出challenge(质询)开始, 客户端使用此challenge与隐性密码计算出一个response(应答)。不同的challenge,不可能计算出相同的response;任何拥 有secret password的一方,都可以用相同的challenge算出相同的response。因此,服务器只要比较客户端返回的response是否与自己算 出的response相同,就可以知道客户端所拥有的密码是否正确。由于真正的密码并没有通过网络,所以不怕网络监测。
4.5 kerberos
kerberos是一种网络型验证协议。除非你的网络已经使用kerberos,否则你应该用不到kerberos机制;相对的,如果你的网络已经架设了kerberos验证中心,sasl就能完美的将smtp验证整合进现有的体系。
4.6 anonymous
anonymous机制对smtp没有意义,因为smtp验证的用意在于限制转发服务的使用对象,而不是为了形成open relay,sasl之所以提供这种机制,主要是为了支持其他协议。
当 客户端链接到一个支持sasl的邮件服务器时,服务器会以优先级列出可用的机制供客户端选择。如果客户端也支持多钟机制,则当第一种机制验证失败时,客户 端可能会继续尝试第二种机制,直到通过验证或是所有机制都失败为止。如果双方在一开始就无法协调出共同的机制,验证过程就算失败。
一旦双方在使用哪种机制上达成共识,就开始进行验证过程。实际的交互过程随机制而定,但通常包含一次或多次应答过程。验证协议本身也规定了应答内容的编码格式。
  1. 总结
    数字证书, 是级联认证派发的, 最上层是根CA认证中心. 数字证书的根本作用, 是为了保证所有人公钥的安全性和真实性. 大致认证过程是: 通过CA的公钥来解出该CA所派发的证书里面所包含的公钥(用户或者机构的). 并通过该公钥来验证证书持有人的真实性. (因为持有人并不一定是证书所有人) 通过上面对SSL的分析,我们可以看到,SSL并不能阻止别人获得你传输的数据,但是由于你传输的数据都是加密过的,别人拿到了毫无用处,一样可以保护信 息的安全。还有一点需要强调一下,SSL并不依赖于TCP,它可以建立在任何可靠的传输层协议(比如TCP)之上。也就是说SSL是不能建立在UDP之上 的。这是显然的,如果传输都不可靠,偶尔丢两个包或者包的顺序换一换的话,怎么保证安全呢?
    SASL是提供一种用户身份认证机制, 你可以简单认为是用来认证用户的账号/密码是否运行进入系统或者使用系统的服务. 一般较长使用digest-md5, 该种机制下, 密码可以不用在网络上传输, 也就不用怕密码被窃听.