Solaris 开发者安全性指南

SASL 会话初始化

服务器和客户机通过协议建立连接。要使用 SASL 执行验证,服务器和客户机可以分别使用 sasl_server_new()sasl_client_new() 来创建 SASL 连接上下文。SASL 客户机和服务器可以使用 sasl_setprop() 来设置对机制强制执行安全限制的属性。此方法使 SASL 消费方应用程序可以决定指定 SASL 连接上下文的最小 SSF、最大 SSF 和安全属性。

#define SASL_SEC_NOPLAINTEXT            0x0001

#define SASL_SEC_NOACTIVE               0x0002

#define SASL_SEC_NODICTIONARY           0x0004

#define SASL_SEC_FORWARD_SECRECY        0x0008

#define SASL_SEC_NOANONYMOUS            0x0010

#define SASL_SEC_PASS_CREDENTIALS       0x0020

#define SASL_SEC_MUTUAL_AUTH            0x0040

注 –

验证和安全层可由客户机/服务器协议提供,也可由 libsasl 外部的某些其他机制提供。在这类情况下,可以使用 sasl_setprop() 来设置外部验证 ID 或外部 SSF。例如,请考虑协议对服务器结合使用 SSL 和客户机验证的情况。在这种情况下,外部验证标识可以为客户机的主题名称。外部 SSF 可以为密钥大小。


对于服务器,libsasl 可以依据安全属性和外部 SSF 来确定可用的 SASL 机制。客户机可以通过协议从 SASL 服务器获取可用的 SASL 机制。

为使 SASL 服务器可以创建 SASL 连接上下文,服务器应该调用 sasl_server_new()。可以重复使用不再使用的现有 SASL 连接上下文。但是,可能需要重置以下参数:

#define SASL_DEFUSERREALM 3     /* default realm passed to server_new or set with setprop */

#define SASL_IPLOCALPORT 8      /* iplocalport string passed to server_new */

#define SASL_IPREMOTEPORT 9     /* ipremoteport string passed to server_new */

#define SASL_SERVICE    12      /* service passed to sasl_*_new */

#define SASL_SERVERFQDN 13      /* serverFQDN passed to sasl_*_new */

可以修改 sasl_client_new()sasl_server_new() 的任何参数,但回调和协议标志除外。

服务器和客户机还可以使用 sasl_setprop() 来指定以下属性,从而建立安全策略并设置连接特定参数:

#define SASL_SSF_EXTERNAL 100 /* external SSF active (sasl_ssf_t *) */

#define SASL_SEC_PROPS 101 /* sasl_security_properties_t */

#define SASL_AUTH_EXTERNAL 102 /* external authentication ID (const char *)

 */

服务器可以调用 sasl_listmech() 来获取满足安全策略的可用 SASL 机制的列表。一般情况下,客户机可以采用与协议相关的方式从服务器获取可用机制的列表。

下图说明了 SASL 会话的初始化过程。在此图和后续的图中,为了简单起见,省略了通过协议进行传输后的数据检查。

图 7–3 SASL 会话初始化

图中显示了在 SASL 会话初始化期间客户机和服务器执行的步骤。