Solaris 开发者安全性指南

SASL 验证

验证根据使用的安全机制采用不同数量的客户机和服务器步骤。SASL 客户机将调用 sasl_client_start() 和要使用的安全机制列表。此列表通常来自服务器。libsasl 将依据可用机制和客户机的安全策略选择要用于此 SASL 会话的最佳机制。客户机的安全策略控制允许的机制。选定的机制由 sasl_client_start() 返回。有时,客户机的安全机制需要其他验证信息。对于已注册的回调,libsasl 将调用指定的回调,除非回调函数为 NULL。如果回调函数为 NULL,则 libsasl 将返回 SASL_INTERACT 和对所需信息的请求。如果返回 SASL_INTERACT,则应使用请求的信息调用 sasl_client_start()

如果 sasl_client_start() 返回 SASL_CONTINUE 或 SASL_OK,则客户机应向服务器发送包含生成的所有验证数据的选定机制。如果返回任何其他值,则表示出现了错误。例如,任何机制可能都不可用。

服务器将接收客户机选定的机制,以及所有的验证数据。随后,服务器将调用 sasl_server_start() 来初始化此会话的机制数据。sasl_server_start() 还将处理所有的验证数据。如果 sasl_server_start() 返回 SASL_CONTINUE 或 SASL_OK,则服务器将发送验证数据。如果 sasl_server_start() 返回任何其他值,则表示出现了错误,如不可接受的机制或验证失败。必须中止验证。应该释放或重复使用 SASL 上下文。

下图说明了此部分的验证过程。

图 7–4 SASL 验证:发送客户机数据

图中显示客户机向服务器发送验证数据时客户机和服务器执行的步骤。

如果服务器对 sasl_server_start() 的调用返回 SASL_CONTINUE,则服务器将继续与客户机进行通信,以获取所有必要的验证信息。后续步骤的数目取决于机制。如果需要,客户机可以调用 sasl_client_step() 来处理来自服务器的验证数据并生成回复。同样,服务器可以调用 sasl_server_step() 来处理来自客户机的验证并相应地生成回复。此交换将持续进行下去,直到验证完成或出现错误为止。如果返回 SASL_OK,则指示对客户机或服务器的验证已成功完成。SASL 机制可能仍然具有要发送给另一端的其他数据,因此另一端可以完成验证。在两端都完成验证后,服务器和客户机便可查询彼此的属性。

下图显示了服务器与客户机之间为传输其他验证数据所执行的交互。

图 7–5 SASL 验证:处理服务器数据

图中显示服务器向客户机返回数据时客户机和服务器执行的步骤。