JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 开发者安全性指南     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  面向开发者的 Oracle Solaris 安全(概述)

2.  开发特权应用程序

3.  编写 PAM 应用程序和服务

4.  编写使用 GSS-API 的应用程序

5.  GSS-API 客户机示例

6.  GSS-API 服务器示例

7.  编写使用 SASL 的应用程序

8.  Oracle Solaris 加密框架介绍

9.  编写用户级加密应用程序和提供者

10.  使用智能卡框架

A.  基于 C 的 GSS-API 样例程序

B.  GSS-API 参考

GSS-API 函数

早期 GSS-API 版本中的函数

用于处理 OID 的函数

重命名的函数

GSS-API 状态码

GSS-API 主状态码值

显示状态码

状态码宏

GSS-API 数据类型和值

基本 GSS-API 数据类型

OM_uint32

gss_buffer_desc

gss_OID_desc

gss_OID_set_desc

gss_channel_bindings_struct

名称类型

通道绑定的地址类型

GSS-API 中特定于实现的功能

特定于 Oracle Solaris 的函数

人工可读的名称语法

匿名名称的格式

实现选定数据类型

删除上下文和存储数据

保护通道绑定信息

上下文导出和进程间令牌

支持的凭证类型

凭证到期

上下文到期

回绕大小限制和 QOP 值

使用 minor_status 参数

Kerberos v5 状态码

Kerberos v5 中状态码 1 的返回消息

Kerberos v5 中状态码 2 的返回消息

Kerberos v5 中状态码 3 的返回消息

Kerberos v5 中状态码 4 的返回消息

Kerberos v5 中状态码 5 的返回消息

Kerberos v5 中状态码 6 的返回消息

Kerberos v5 中状态码 7 的返回消息

C.  指定 OID

D.  SASL 示例的源代码

E.  SASL 参考表

F.  打包和签署加密提供者

词汇表

索引

GSS-API 状态码

主状态码是按下图所示方式在 OM_uint32 中进行编码的。

图 B-1 主状态编码

image:图中显示在 OM_uint32 中对主状态码进行编码的方式。

如果 GSS-API 例程返回的 GSS 状态码的高 16 位包含非零值,则调用失败。如果调用错误字段为非零值,则应用程序的例程调用是错误的。表 B-1 中列出了调用错误。如果例程错误字段为非零值,则说明该例程因例程特定错误(在表 B-2 中列出)而失败。无论高 16 位指示失败还是成功,都可以设置状态码的补充信息字段中的位。表 B-3 中列出了各个位的含义。

GSS-API 主状态码值

下表列出了 GSS-API 返回的调用错误。这些错误特定于特定语言绑定(在本例中为 C)。

表 B-1 GSS-API 调用错误

错误
字段中的值
含义
GSS_S_CALL_INACCESSIBLE_READ
1
不能读取所需的输入参数
GSS_S_CALL_INACCESSIBLE_WRITE
2
不能写入所需的输出参数
GSS_S_CALL_BAD_STRUCTURE
3
参数格式错误

下表列出了 GSS-API 例程错误,即 GSS-API 函数返回的一般错误。

表 B-2 GSS-API 例程错误

错误
字段中的值
含义
GSS_S_BAD_MECH
1
请求不受支持的机制。
GSS_S_BAD_NAME
2
提供无效名称。
GSS_S_BAD_NAMETYPE
3
提供的名称属于不受支持的类型。
GSS_S_BAD_BINDINGS
4
提供不正确的通道绑定。
GSS_S_BAD_STATUS
5
提供无效状态码。
GSS_S_BAD_MIC、GSS_S_BAD_SIG
6
令牌具有无效的 MIC。
GSS_S_NO_CRED
7
凭证不可用、不可访问或不受支持。
GSS_S_NO_CONTEXT
8
未建立上下文。
GSS_S_DEFECTIVE_TOKEN
9
令牌无效。
GSS_S_DEFECTIVE_CREDENTIAL
10
凭证无效。
GSS_S_CREDENTIALS_EXPIRED
11
引用的凭证已到期。
GSS_S_CONTEXT_EXPIRED
12
上下文已到期。
GSS_S_FAILURE
13
各种故障。基础机制检测到未定义特定 GSS–API 状态码的错误。机制特定状态码(即次状态码)提供了有关错误的更多详细信息。
GSS_S_BAD_QOP
14
无法提供请求的保护质量。
GSS_S_UNAUTHORIZED
15
本地安全策略禁止该操作。
GSS_S_UNAVAILABLE
16
操作或选项不可用。
GSS_S_DUPLICATE_ELEMENT
17
请求的凭证元素已存在。
GSS_S_NAME_NOT_MN
18
提供的名称不是机制名称 (mechanism name, MN)。

名称 GSS_S_COMPLETE(零值)指示缺少 API 错误或补充信息位。

下表列出了 GSS-API 函数返回的补充信息值。

表 B-3 GSS-API 补充信息代码

代码
位数
含义
GSS_S_CONTINUE_NEEDED
0 (LSB)
仅由 gss_init_sec_context()gss_accept_sec_context () 返回。必须再次调用例程才能完成其函数。
GSS_S_DUPLICATE_TOKEN
1
该令牌是早期令牌的副本。
GSS_S_OLD_TOKEN
2
令牌的有效期已到期。
GSS_S_UNSEQ_TOKEN
3
已处理后面的令牌。
GSS_S_GAP_TOKEN
4
未收到预期的每条消息令牌。

有关状态码的更多信息,请参见GSS-API 状态码

显示状态码

函数 gss_display_status() 将 GSS-API 状态码转换为文本格式。采用此格式,可以向用户显示代码或将代码置于文本日志中。gss_display_status() 一次仅显示一个状态码,而且某些函数可以返回多个状态条件。因此,应该将 gss_display_status() 作为循环的一部分进行调用。如果 gss_display_status() 指示非零状态码,则函数可以提取其他状态码。

示例 B-1 使用 gss_display_status() 显示状态码

OM_uint32 message_context;
OM_uint32 status_code;
OM_uint32 maj_status;
OM_uint32 min_status;
gss_buffer_desc status_string;

...

message_context = 0;

do {

     maj_status = gss_display_status(
               &min_status,
               status_code,
               GSS_C_GSS_CODE,
               GSS_C_NO_OID,
               &message_context,
               &status_string);

     fprintf(stderr, "%.*s\n", \
               (int)status_string.length, \
               (char *)status_string.value);

     gss_release_buffer(&min_status, &status_string,);

} while (message_context != 0);

状态码宏

GSS_CALLING_ERROR()GSS_ROUTINE_ERROR ()GSS_SUPPLEMENTARY_INFO() 使用 GSS 状态码。这些宏可以删除相关字段以外的所有信息。例如,可以将 GSS_ROUTINE_ERROR() 应用于状态码,以删除调用错误和补充信息字段。此操作仅保留例程错误字段。可以将这些宏提供的值与相应类型的 GSS_S_xxx 符号直接进行比较。如果状态码指示调用错误或例程错误,则宏 GSS_ERROR() 返回非零值,否则将返回零值。由 GSS-API 定义的所有宏一次可以评估多个参数。