-
Notifications
You must be signed in to change notification settings - Fork 0
SASL介绍
SASL的意思是简单授权和安全层,英文名称叫做simple authentication and secure layer。它是一个给面向连接提供认证和安全服务的框架。它通过提供给协议和安全机制的接口来将应用程序和安全机制分层,避免了硬编码提高了程序的可重用性
SASL的验证是基于挑战应答形式的,大体框架如下
C: Request Message| Credential|Initial response
S: 验证凭据并发起挑战
<若干次挑战应答>
S: 成功或者失败
有些安全机制规定了应该由服务器发起第一条请求,但是SASL并没有做硬性规定
客户端发起的用户凭证(credential)需要有一个string标明自己的身份,这个凭证代表的是授权用户,string表明的是自己想要作为什么身份进行操作的用户。服务器会检测凭证是否有对应string的授权权限。如果小明拜托小王帮自己做事情,那么小王就是用一个可以代表小明的凭证交给服务器,并且在string中表示自己扮演的是小明而不是小王。这种机制叫做代理授权(proxy authentication)。 但是这个string是可以选择的加上的,如果string为空或者不可用时,就代表着用户想扮演凭证代表的用户的角色,比如,小明发送自己的凭据来代表自己是自己
SASL并不限制凭证的类型,不管是X.509证书,Kerboros 票据还是简单的用户名/密码形式,因为它只是一个框架,它提供的是实现credential验证的接口。
票据是服务器验证的第一步。
服务器在成功验证票据后,会和客户端协商SASL机制和安全级别。SASL机制就是SASL层连接的规定安全服务的一端。通常,服务器会将自己可以选用的机制的列表发给客户端,客户端从中选择一个自己适合的机制
除了机制的选择以外,客户端和服务器可以可选择的协商一个安全层,安全层可以提供诸如数据完整性和加密性的保护
但是安全层用的很少,因为它的安全层功能相当部分的时候会和外部安全协议作用重复
SSF安全强度因子是ORACLE 开发者安全性指南中的内容,并未在RFC文档中看到它的定义。它是solaris上具体的libsasl库实现的内容。但是SSF的存在很有实际价值,它决定了之后的安全属性的强度如何
安全层如果协商好了的话,之后的会话都在安全层上进行。如果不协商安全层,那么SASL提供的只是认证服务
SASL层对那些插件式的认证系统和有着数据安全保护的应用协议来说是一个非常重要的间接层,比如说LDAP轻量目录访问协议,SMTP简单邮件传输协议等等应用层协议都可以使用SASL层。SASL允许使用不同的安全机制来完成认证,GSSAPI, Kerberos, NTLM等等都是可以选择的安全机制中的一种更多戳这里
从维基百科上可以看到SASL目前支持的一些机制类型:
EXTERNAL
ANONYMOUS 给未授权的访客登录的模式
PLAIN 明文传输密码机制
OTP 一次性密码机制,取代了S/Key模式
CRAM-MD5 通常用于SMTP以及其他 POP和IMAP用户的认证。是一种简单的挑战应答模式
DIGEST-MD5 提供安全层,已被RFC放弃使用
SCRAM 基于通道绑定的现代的挑战应答机制
NTLM windows网络上的一系列提供数据完整性,加密性和认证性的安全协议
GSSAPI kerberos v5,包含安全层
BROWSERID-AES128
EAP-AES128
GateKeeper