SASL认证框架
1 SASL 简介
SASL是一种用来扩充C/S模式验证能力的机制认证机制, 全称Simple Authentication and Security Layer,常见的机制如下:
plain(较常用)
plain是最简单的机制,但同时也是最危险的机制,因为身份证书(登录名称与密码)是以base64字符串格式通过网络,没有任何加密保护措施。因此,使用plain机制时,你可能会想要结合tls。
login
login不是其正式支持的机制,但某些旧版的mua使用这种机制,所以cyrus sasl让你可选择其是否支持login机制。如果你的用户仍在使用这类老掉牙的mua,你必须在编译sasl函数库时,指定要包含login的支持。 login的证书交换过程类似plain。
otp
otp是一种使用“单次密码”的验证机制。此机制不提供任何加密保护,因为没必要每个密码都只能使用一次,每次联机都要改用新密码。smto client必须能够产生otp证书。
digest-md5(较常用)
使用这种机制时,client与server共享同一个隐性密码,而且此密码不通过网络传输。验证过程是从服务器先提出challenge(质询)开始, 客户端使用此challenge与隐性密码计算出一个response(应答)。不同的challenge,不可能计算出相同的response;任何拥 有secret password的一方,都可以用相同的challenge算出相同的response。因此,服务器只要比较客户端返回的response是否与自己算 出的response相同,就可以知道客户端所拥有的密码是否正确。由于真正的密码并没有通过网络,所以不怕网络监测。
kerberos
kerberos是一种网络型验证协议。除非你的网络已经使用kerberos,否则你应该用不到kerberos机制;相对的,如果你的网络已经架设了kerberos验证中心,sasl就能完美的将smtp验证整合进现有的体系。
2 SASL 和 kerberos 的关系
2.1 SASL 是什么?
SASL(Simple Authentication and Security Layer,简单认证与安全层)本身不是一个具体的认证协议,而是一套标准化的 “认证框架” 或 “接口规范”。它的核心作用是:
为不同的网络服务(如 Zookeeper、Hadoop、MySQL 等)提供统一的认证接口,让服务无需重复开发认证逻辑。
支持多种底层认证机制(不止 Kerberos,还包括 PLAIN 明文密码、DIGEST-MD5 摘要认证等),服务可按需选择。
除了认证,部分机制还能提供数据加密、完整性校验功能,保障通信安全。
简单说,SASL 就像一个 “认证插件平台”,允许服务通过 “插件” 的方式接入不同的认证方案,而不用修改自身核心逻辑。
2.2 Kerberos 是什么?
Kerberos 是一种网络身份认证协议,最初由 MIT 开发,旨在解决分布式系统中的 “安全身份验证” 问题,避免密码在网络中明文传输。它的核心特点是:
基于 “票据(Ticket)” 认证:用户登录后从 KDC(密钥分发中心)获取票据,后续访问服务时用票据证明身份,无需再传密码。
三方架构:包含客户端、服务端、KDC(由 AS 认证服务器和 TGS 票据授予服务器组成),所有通信均通过加密保障安全。
适用于分布式场景:常见于 Hadoop、Zookeeper、Kafka 等大数据组件的身份认证。
简单说,Kerberos 是一种 “安全的认证方案”,专门解决 “如何在不可信网络中安全验证身份” 的问题。
2.3 SASL 与 Kerberos 的核心关系
二者是 “框架与协议” 的组合关系,具体表现为:
Kerberos 是 SASL 支持的一种底层认证机制:SASL 提供了统一的认证接口,而 Kerberos 作为 “插件”,通过 SASL 的接口为服务提供认证能力。
SASL 为 Kerberos 提供 “适配层”:很多服务(如 Zookeeper)本身不直接实现 Kerberos 协议,而是通过 SASL 接口接入 Kerberos—— 服务只需按 SASL 规范处理认证流程,底层的 Kerberos 票据生成、加密等逻辑由 SASL 对接完成。
并非绑定关系:SASL 还支持其他认证机制(如 PLAIN 明文认证),Kerberos 也可不通过 SASL 直接使用(但通过 SASL 能更便捷地适配多服务)。
用一个比喻理解:SASL 像 “手机充电接口”(统一标准),Kerberos 像 “某品牌的充电头”(具体方案)—— 手机只需支持充电接口,就能用不同品牌的充电头(包括 Kerberos 这个 “充电头”),无需为每个充电头单独设计接口。
2.4 实际场景中的应用(以 Zookeeper 为例)
Zookeeper 场景中,二者的协作流程是:
Zookeeper 服务端启用 SASL 认证,并配置 “使用 Kerberos 作为 SASL 的认证机制”。
Zookeeper 客户端通过 SASL 接口,调用 Kerberos 协议的逻辑(生成票据、与 KDC 交互)。
客户端与服务端通过 SASL 规范的流程交换数据,底层实际是 Kerberos 的票据验证逻辑。
最终通过 Kerberos 完成身份认证,同时借助 SASL 保障认证流程的标准化。
Last updated