服务器和客户机都必须获取各自的凭证,然后才能建立安全上下文。 应用程序可以在凭证到期之前重用它,在到期之后必须重新获取凭证。 客户机使用的凭证与由服务器使用的凭证可以具有不同的生命周期。
基于 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) 手册页。