Solaris 开发者安全性指南

在 GSS-API 中使用凭证

凭证是指向主体名称提供应用程序声明证明的数据结构。 应用程序使用凭证来建立其全局标识。 此外,凭证还可用于确认实体的权限。

GSS-API 不提供凭证。 凭证由那些以 GSS-API 为基础的安全机制在调用 GSS-API 函数之前创建。 在许多情况下,用户会在登录时接收凭证。

指定的 GSS-API 凭证对于单个主体有效。 单个凭证可以包含该主体的多个元素,每个元素由不同的机制创建。 如果某个凭证是在包含多个安全机制的计算机上获取的,则该凭证在传输到包含其中部分机制的计算机上时有效。 GSS-API 通过 gss_cred_id_t 结构访问凭证。 此结构称为凭证句柄。 凭证对于应用程序是不透明的。 因此,应用程序无需知道指定凭证的具体信息。

凭证采用以下三种形式:

在 GSS-API 中获取凭证

服务器和客户机都必须获取各自的凭证,然后才能建立安全上下文。 应用程序可以在凭证到期之前重用它,在到期之后必须重新获取凭证。 客户机使用的凭证与由服务器使用的凭证可以具有不同的生命周期。

基于 GSS-API 的应用程序可以通过以下两种方法获取凭证:

大多数情况下,仅有上下文接受器(即服务器)才能调用 gss_acquire_cred()。 上下文启动器(即客户机)通常在登录时接收凭证。 因此,客户机通常会指定缺省凭证。 服务器也可以跳过 gss_acquire_cred() 而使用其缺省凭证。

客户机的凭证用于向其他进程证明该客户机的身份。 服务器在获取凭证后即可接受安全上下文。 因此,如果某个客户机向服务器发出 ftp 请求,则表明该客户机可能已经在登录时获取了凭证。 客户机尝试启动上下文时,GSS-API 会自动检索凭证。 但是,服务器程序可以明确获取所请求服务 (ftp) 的凭证。

如果 gss_acquire_cred() 成功完成,则将返回 GSS_S_COMPLETE。 如果不能返回有效的凭证,则将返回 GSS_S_NO_CRED。 有关其他错误代码,请参见 gss_acquire_cred(3GSS) 手册页。 有关相应的示例,请参见第 8 章中的“获取凭证”。

gss_add_cred()gss_acquire_cred() 相似。 但是,gss_add_cred() 允许应用程序使用现有的凭证来创建新句柄或者添加新的凭证元素。 如果将 GSS_C_NO_CREDENTIAL 指定为现有的凭证,则 gss_add_cred() 会根据缺省行为创建新凭证。 有关更多信息,请参见 gss_add_cred(3GSS) 手册页。