Solaris 开发者安全性指南

GSS-API 中的名称

名称是指主体。 在网络安全术语中,主体是指用户、程序或计算机。 主体可以是客户机或服务器。 下面是主体的一些示例:

在 GSS-API 中,名称会存储为 gss_name_t 对象,该对象对于应用程序是不透明的。 名称可以通过 gss_import_name() 函数从 gss_buffer_t 对象转换为 gss_name_t 形式。 所导入的每个名称都有一个指示名称格式的相关名称类型。 有关名称类型的更多信息,请参见GSS-API OID。 有关有效名称类型的列表,请参见名称类型

gss_import_name() 具有以下语法:

OM_uint32 gss_import_name (

       OM_uint32          *minor-status,

       const gss_buffer_t input-name-buffer,

       const gss_OID      input-name-type,

       gss_name_t         *output-name)
minor-status

基础机制返回的状态码。请参见GSS-API 状态码

input-name-buffer

包含要导入的名称的 gss_buffer_desc 结构。 应用程序必须明确分配此结构。 请参见GSS-API 中的字符串和类似数据示例 4–2。 应用程序不再使用为该参数分配的空间时,必须通过 gss_release_buffer() 解除分配该空间。

input-name-type

用于指定 input-name-buffer 的格式的 gss_OID。请参见GSS-API 中的名称类型。 另外,名称类型中还包含一个有效名称类型表。

output-name

接收名称的 gss_name_t 结构。

示例 4–1 中所示的通用示例进行了小修改,说明如何使用 gss_import_name()。 首先,将规则字符串插入到 gss_buffer_desc 结构中, 然后,使用 gss_import_name() 将该字符串放到 gss_name_t 结构中。


示例 4–2 使用 gss_import_name()

char *name_string;

gss_buffer_desc input_name_buffer;

gss_name_t      output_name_buffer;



input_name_buffer.value = name_string;

input_name_buffer.length = strlen(input_name_buffer.value) + 1;



gss_import_name(&minor_status, input_name_buffer, 

                    GSS_C_NT_HOSTBASED_SERVICE, &output_name);



gss_release_buffer(input_name_buffer);

使用 gss_display_name() 可以将所导入的名称放回到 gss_buffer_t 对象中,以便能够以可读格式显示。 但是,鉴于基础机制存储名称的方式,gss_display_name() 不能保证所得到的字符串与原来的字符串相同。 GSS-API 包括若干个用于处理名称的其他函数。请参见GSS-API 函数

gss_name_t 结构可以包含一个名称的多个版本。 可以为 GSS-API 所支持的每个机制都生成一个版本。 也即是说,user@companygss_name_t 结构可能会包含该名称的两个版本:一个版本由 Kerberos v5 提供,另一个版本由其他机制提供。 gss_canonicalize_name() 函数将内部名称和机制用作输入, gss_canonicalize_name() 可生成另一个内部名称,其中包含一个特定于该机制的名称版本。

此类特定于机制的名称称为机制名称 (Mechanism Name, MN)。 机制名称是指指定机制所生成的主体名称,而不是指机制的名称。 下图所示对此过程进行了说明。

图 4–3 内部名称和机制名称

该图说明如何派生机制名称。