面向开发者的 Oracle® Solaris 11 安全性指南

退出打印视图

更新时间: 2014 年 7 月
 
 

GSS-API 参考信息

其他 GSS-API 定义可在 gssapi.h 文件中找到。

GSS-API 函数

Oracle Solaris 软件实现了 GSS-API 函数。有关每个函数的更多信息,请参见其手册页。另请参见Functions From Previous Versions of GSS-API

gss_acquire_cred()

通过获取预先存在凭证的 GSS-API 凭证句柄来建立全局标识

gss_add_cred()

以增量方式构造凭证

gss_inquire_cred()

获取有关凭证的信息

gss_inquire_cred_by_mech()

获取有关凭证的每机制信息

gss_release_cred()

放弃凭证句柄

gss_init_sec_context()

使用对等应用程序启动安全上下文

gss_accept_sec_context()

接受对等应用程序启动的安全上下文

gss_delete_sec_context()

放弃安全上下文

gss_process_context_token()

在对等应用程序的安全上下文中处理令牌

gss_context_time()

确定上下文处于有效状态的时间

gss_inquire_context()

获取有关安全上下文的信息

gss_wrap_size_limit()

确定上下文中 gss_wrap() 的令牌大小限制

gss_export_sec_context()

将安全上下文传输给其他进程

gss_import_sec_context()

导入传输的上下文

gss_get_mic()

计算消息的加密消息完整性代码 (Message Integrity Code, MIC)

gss_verify_mic()

根据消息检查 MIC,以验证收到消息的完整性

gss_wrap()

将 MIC 附加到消息中,并有选择地加密消息内容

gss_unwrap()

使用附加的 MIC 验证消息。解密消息内容(如果必要)

gss_import_name()

将连续的字符串名称转换为内部格式名称

gss_display_name()

将内部格式名称转换为文本

gss_compare_name()

比较两个内部格式名称

gss_release_name()

放弃内部格式名称

gss_inquire_names_for_mech()

列出指定机制支持的名称类型

gss_inquire_mechs_for_name()

列出支持指定名称类型的机制

gss_canonicalize_name()

将内部名称转换为机制名称 (Mechanism Name, MN)

gss_export_name()

将 MN 转换为导出格式

gss_duplicate_name()

创建内部名称的副本

gss_add_oid_set_member()

向组中添加对象标识符

gss_display_status()

将 GSS-API 状态码转换为文本

gss_indicate_mechs()

确定可用的基础验证机制

gss_release_buffer()

放弃缓冲区

gss_release_oid_set()

放弃一组对象标识符

gss_create_empty_oid_set()

创建不含对象标识符的组

gss_test_oid_set_member()

确定对象标识符是否为组的成员

早期 GSS-API 版本中的函数

本节说明了早期 GSS-API 版本中包含的函数。

用于处理 OID 的函数

    Oracle Solaris 的 GSS-API 实现提供了下列函数,这些函数满足了便捷性和向后兼容性的需要。但是,其他 GSS-API 实现可能不支持这些函数。

  • gss_delete_oid()

  • gss_oid_to_str()

  • gss_str_to_oid()

尽管可以将机制的名称从字符串转换为 OID,但程序员应尽可能地使用缺省 GSS-API 机制。

重命名的函数

    以下函数已被更新的函数所替代。在所有情况下,新函数的功能与较早的函数等效。尽管支持较早的函数,但开发者应尽可能地将这些函数替换为更新的函数。

  • gss_sign() 已被替换为 gss_get_mic()

  • gss_verify() 已被替换为 gss_verify_mic()

  • gss_seal() 已被替换为 gss_wrap()

  • gss_unseal() 已被替换为 gss_unwrap()

GSS-API 状态码

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

图 C-1  主状态编码

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

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

GSS-API 主状态码值

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

表 C-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 函数返回的一般错误。

表 C-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 函数返回的补充信息值。

表 C-3  GSS-API 补充信息代码
Code(代码)
位数
含义
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 Status Codes

显示状态码

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

示例 C-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 定义的所有宏一次可以评估多个参数。

GSS-API 数据类型和值

    本节介绍各种类型的 GSS-API 数据类型和值。某些数据类型(如 gss_cred_id_t 或 gss_name_t)对用户是不透明的。这些数据类型无需介绍。本节介绍以下主题:

  • Basic GSS-API Data Types-给出 OM_uint32、gss_buffer_desc、gss_OID_desc、gss_OID_set_desc_struct 和 gss_channel_bindings_struct 数据类型的定义。

  • 名称类型-给出为指定名称由 GSS-API 识别的各种名称格式。

  • Address Types for Channel Bindings-给出可用作 gss_channel_bindings_t 结构的 initiator_addrtypeacceptor_addrtype 字段的各种值。

基本 GSS-API 数据类型

本节介绍 GSS-API 使用的数据类型。

OM_uint32

OM_uint32 是与平台无关的 32 位无符号整数。

gss_buffer_desc

包含 gss_buffer_t 指针的 gss_buffer_desc 的定义采用以下格式:

typedef struct gss_buffer_desc_struct {
        size_t length;
        void *value;
} gss_buffer_desc, *gss_buffer_t;

gss_OID_desc

包含 gss_OID 指针的 gss_OID_desc 的定义采用以下格式:

typedef struct gss_OID_desc_struct {
        OM_uint32 length;
        void*elements;
} gss_OID_desc, *gss_OID;

gss_OID_set_desc

包含 gss_OID_set 指针的 gss_OID_set_desc 的定义采用以下格式:

typedef struct gss_OID_set_desc_struct  {
        size_t  count;
        gss_OID elements;
} gss_OID_set_desc, *gss_OID_set;

gss_channel_bindings_struct

gss_channel_bindings_struct 结构和 gss_channel_bindings_t 指针的定义的格式如下:

typedef struct gss_channel_bindings_struct {
        OM_uint32 initiator_addrtype;
        gss_buffer_desc initiator_address;
        OM_uint32 acceptor_addrtype;
        gss_buffer_desc acceptor_address;
        gss_buffer_desc application_data;
} *gss_channel_bindings_t;

名称类型

名称类型指示关联名称的格式。有关名称和名称类型的更多信息,请参见Names in GSS-APIGSS-API OIDs。GSS-API 支持下表中的 gss_OID 名称类型。

GSS_C_NO_NAME

建议将符号名称 GSS_C_NO_NAME 作为参数值,以指示在名称传输中未提供任何值。

GSS_C_NO_OID

此值对应于空输入值,而不是实际的对象标识符。如果指定了该值,则该值基于机制特定缺省可列显语法指示关联名称的解释。

GSS_C_NT_ANONYMOUS

标识匿名名称的方式。可以比较此值,以与机制无关的方式确定名称是否引用匿名主体。

GSS_C_NT_EXPORT_NAME

使用 gss_export_name() 函数导出的名称。

GSS_C_NT_HOSTBASED_SERVICE

用于表示与主机关联的服务。此名称格式是按照以下方式使用两个元素(服务和主机名)构造的:service@hostname

GSS_C_NT_MACHINE_UID_NAME

用于指示与本地系统中的用户对应的数字用户标识符。该值的解释特定于 OS。gss_import_name() 函数将此 UID 解析为用户名,之后该 UID 就表示为用户名形式。

GSS_C_NT_STRING_STRING_UID_NAME

用于指示一个数字字符串,该字符串表示本地系统中的用户的数字用户标识符。该值的解释特定于 OS。此名称类型与计算机 UID 格式类似,不同的是缓冲区包含表示用户 ID 的字符串。

GSS_C_NT_USER_NAME

本地系统中的命名用户。该值的解释特定于 OS。该值采用以下格式:username

通道绑定的地址类型

下表给出了 gss_channel_bindings_struct 结构的 initiator_addrtypeacceptor_addrtype 字段的可能值。这些字段指示名称可以采用的格式,例如 ARPAnet IMP 地址或 AppleTalk 地址。通道绑定将在Using Channel Bindings in GSS-API中讨论。

表 C-4  通道绑定地址类型
字段
值(十进制)
地址类型
GSS_C_AF_UNSPEC
0
未指定的地址类型
GSS_C_AF_LOCAL
1
本地主机
GSS_C_AF_INET
2
Internet 地址类型,例如 IP
GSS_C_AF_IMPLINK
3
ARPAnet IMP
GSS_C_AF_PUP
4
pup 协议,例如 BSP
GSS_C_AF_CHAOS
5
MIT CHAOS 协议
GSS_C_AF_NS
6
XEROX NS
GSS_C_AF_NBS
7
nbs
GSS_C_AF_ECMA
8
ECMA
GSS_C_AF_DATAKIT
9
Datakit 协议
GSS_C_AF_CCITT
10
CCITT
GSS_C_AF_SNA
11
IBM SNA
GSS_C_AF_DECnet
12
DECnet
GSS_C_AF_DLI
13
直接数据链接接口
GSS_C_AF_LAT
14
LAT
GSS_C_AF_HYLINK
15
NSC 超级通道
GSS_C_AF_APPLETALK
16
AppleTalk
GSS_C_AF_BSC
17
BISYNC
GSS_C_AF_DSS
18
分布式系统服务
GSS_C_AF_OSI
19
OSI TP4
GSS_C_AF_X25
21
X.25
GSS_C_AF_NULLADDR
255
未指定任何地址

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

在 API 的实现之间 GSS-API 的某些方面可能有所不同。大多数情况下,实现之间的差异对程序只有很小的影响。在所有情况下,开发者都可以不依赖任何特定于给定实现(包括 Oracle Solaris 实现)的操作来最大化可移植性。

特定于 Oracle Solaris 的函数

Oracle Solaris 实现中没有定制的 GSS-API 函数。

人工可读的名称语法

GSS-API 实现在与名称对应的可列显语法中可能有所不同。对于可移植性,应用程序不应该比较使用人工可读(即可列显)格式的名称。相反,这些应用程序应该使用 gss_compare_name() 来确定内部格式名称是否与任何其他名称匹配。

Oracle Solaris gss_display_name() 实现按以下方式显示名称。如果 input_name 参数表示用户主体,则 gss_display_name() 将返回user_principal@realm 作为 output_name_buffer,返回gss_OID 值作为 output_name_type。如果 Kerberos v5 是基础机制,则 gss_OID 为 1.2.840.11354.1.2.2

如果 gss_display_name() 接收到的名称是 gss_import_name() 使用 GSS_C_NO_OID 名称类型创建的,则 gss_display_name() 将在 output_name_type 参数中返回 GSS_C_NO_OID。

匿名名称的格式

gss_display_name() 函数将输出字符串 "<anonymous>",以指示匿名 GSS-API 主体。与此名称关联的名称类型 OID 为 GSS_C_NT_ANONYMOUS。Oracle Solaris 实现支持的其他有效可列显名称不应以尖括号 (<>) 括起。

实现选定数据类型

以下数据类型已作为指针实现,但某些实现可能将这些类型指定为算术类型:gss_cred_t、gss_ctx_id_t 和 gss_name_t。

删除上下文和存储数据

如果上下文建立失败,则 Oracle Solaris 实现不会自动删除部分生成的上下文。因此,应用程序应该通过使用 gss_delete_sec_context() 删除上下文来处理此事件。

Oracle Solaris 实现将通过内存管理自动释放存储的数据(如内部名称)。但是,当不再需要数据元素时,应用程序仍然应该调用相应的函数(如 gss_release_name())。

保护通道绑定信息

对通道绑定的支持随机制而变化。Diffie-Hellman 机制与 Kerberos v5 机制都支持通道绑定。

开发者应该假设通道绑定数据没有保密性保护。尽管 Kerberos v5 机制提供此保护,但通道绑定数据的保密性对于 Diffie-Hellman 机制不可用。

上下文导出和进程间令牌

Oracle Solaris 实现检测并拒绝相同上下文的多次导入尝试。

支持的凭证类型

Oracle Solaris 的 GSS-API 实现支持通过 gss_acquire_cred() 获取 GSS_C_INITIATE、GSS_C_ACCEPT 和 GSS_C_BOTH 凭证。

凭证到期

Oracle Solaris 的 GSS-API 实现支持凭证到期。因此,程序员可以在函数(如 gss_acquire_cred()gss_add_cred())中使用与凭证生命周期相关的参数。

上下文到期

Oracle Solaris 的 GSS-API 实现支持上下文到期。因此,程序员可以在函数(如 gss_init_sec_context()gss_inquire_context())中使用与上下文生命周期相关的参数。

回绕大小限制和 QOP 值

Oracle Solaris 的 GSS-API 实现(与任何基础机制相反)不对 gss_wrap() 处理的消息强加最大大小。应用程序可以使用 gss_wrap_size_limit() 确定最大消息大小。

调用 gss_wrap_size_limit() 时,Oracle Solaris 的 GSS-API 实现可以检测无效 QOP 值。

使用 minor_status 参数

在 Oracle Solaris 的 GSS-API 实现中,函数在 minor_status 参数中仅返回特定于机制的信息。其他实现可能在返回的次状态码中包括特定于实现的返回值。

Kerberos v5 状态码

每个 GSS-API 函数都会返回两个状态码:主状态码次状态码。主状态码与 GSS-API 的行为相关。例如,如果应用程序尝试在安全上下文到期后传输消息,则 GSS-API 将返回 GSS_S_CONTEXT_EXPIRED 的主状态码。GSS-API Status Codes中列出了主状态码。

次状态码是由给定的 GSS-API 实现支持的基础安全机制返回的。每个 GSS-API 函数都采用 minor_statusminor_stat 参数作为第一个变量。无论函数是否成功返回,应用程序都可以检查此参数,以了解基础机制返回的状态。

下表列出了 minor_status 参数中的 Kerberos v5 返回的状态消息。有关 GSS-API 状态码的更多信息,请参见GSS-API Status Codes

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

下表列出了 Kerberos v5 中状态码 1 的返回的次状态消息。

表 C-5  Kerberos v5 状态码 1
次状态
含义
KRB5KDC_ERR_NONE
-1765328384L
无错误
KRB5KDC_ERR_NAME_EXP
-1765328383L
数据库中的客户机项已到期
KRB5KDC_ERR_SERVICE_EXP
-1765328382L
数据库中的服务器项已到期
KRB5KDC_ERR_BAD_PVNO
-1765328381L
请求的协议版本不受支持
KRB5KDC_ERR_C_OLD_MAST_KVNO
-1765328380L
客户机的密钥用旧的主密钥加密
KRB5KDC_ERR_S_OLD_MAST_KVNO
-1765328379L
服务器的密钥用旧的主密钥加密
KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN
-1765328378L
在 Kerberos 数据库中找不到客户机
KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
-1765328377L
在 Kerberos 数据库中找不到服务器
KRB5KDC_ERR_PRINCIPAL_NOT_UNIQUE
-1765328376L
主体具有 Kerberos 数据库中的多项
KRB5KDC_ERR_NULL_KEY
-1765328375L
客户机或服务器具有空密钥
KRB5KDC_ERR_CANNOT_POSTDATE
-1765328374L
票证的生效期不能延后
KRB5KDC_ERR_NEVER_VALID
-1765328373L
请求的有效生命周期为负数或太短
KRB5KDC_ERR_POLICY
-1765328372L
KDC 策略拒绝请求
KRB5KDC_ERR_BADOPTION
-1765328371L
KDC 无法实现请求的选项
KRB5KDC_ERR_ETYPE_NOSUPP
-1765328370L
KDC 不支持加密类型
KRB5KDC_ERR_SUMTYPE_NOSUPP
-1765328369L
KDC 不支持校验和类型
KRB5KDC_ERR_PADATA_TYPE_NOSUPP
-1765328368L
KDC 不支持 padata 类型
KRB5KDC_ERR_TRTYPE_NOSUPP
-1765328367L
KDC 不支持传输的类型
KRB5KDC_ERR_CLIENT_REVOKED
-1765328366L
已撤销客户机的凭证
KRB5KDC_ERR_SERVICE_REVOKED
-1765328365L
已撤销服务器的凭证

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

下表列出了 Kerberos v5 中状态码 2 的返回的次状态消息。

表 C-6  Kerberos v5 状态码 2
次状态
含义
KRB5KDC_ERR_TGT_REVOKED
-1765328364L
已撤销 TGT
KRB5KDC_ERR_CLIENT_NOTYET
-1765328363L
客户机尚无效,请稍后重试
KRB5KDC_ERR_SERVICE_NOTYET
-1765328362L
服务器尚无效,请稍后重试
KRB5KDC_ERR_KEY_EXP
-1765328361L
口令已到期
KRB5KDC_ERR_PREAUTH_FAILED
-1765328360L
预验证失败
KRB5KDC_ERR_PREAUTH_REQUIRED
-1765328359L
需要其他预验证
KRB5KDC_ERR_SERVER_NOMATCH
-1765328358L
请求的服务器和票证不匹配
KRB5PLACEHOLD_27 KRB5PLACEHOLD_30
-1765328357L -1765328354L
KRB5 错误码 27 30(保留)
KRB5KRB_AP_ERR_BAD_INTEGRITY
-1765328353L
解密完整性检查失败
KRB5KRB_AP_ERR_TKT_EXPIRED
-1765328352L
票证已到期
KRB5KRB_AP_ERR_TKT_NYV
-1765328351L
票证尚无效
KRB5KRB_AP_ERR_REPEAT
-1765328350L
请求为重放
KRB5KRB_AP_ERR_NOT_US
-1765328349L
票证不是供我们使用
KRB5KRB_AP_ERR_BADMATCH
-1765328348L
票证/验证者不匹配
KRB5KRB_AP_ERR_SKEW
-1765328347L
时钟相位差太大
KRB5KRB_AP_ERR_BADADDR
-1765328346L
网络地址不正确
KRB5KRB_AP_ERR_BADVERSION
-1765328345L
协议版本不匹配
KRB5KRB_AP_ERR_MSG_TYPE
-1765328344L
消息类型无效
KRB5KRB_AP_ERR_MODIFIED
-1765328343L
消息流已经过修改
KRB5KRB_AP_ERR_BADORDER
-1765328342L
消息无序
KRB5KRB_AP_ERR_ILL_CR_TKT
-1765328341L
非法的跨领域票证
KRB5KRB_AP_ERR_BADKEYVER
-1765328340L
密钥版本不可用

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

下表列出了 Kerberos v5 中状态码 3 的返回的次状态消息。

表 C-7  Kerberos v5 状态码 3
次状态
含义
KRB5KRB_AP_ERR_NOKEY
-1765328339L
服务密钥不可用
KRB5KRB_AP_ERR_MUT_FAIL
-1765328338L
相互验证失败
KRB5KRB_AP_ERR_BADDIRECTION
-1765328337L
消息方向不正确
KRB5KRB_AP_ERR_METHOD
-1765328336L
需要替换验证方法
KRB5KRB_AP_ERR_BADSEQ
-1765328335L
消息中的序列号不正确
KRB5KRB_AP_ERR_INAPP_CKSUM
-1765328334L
消息中的校验和类型不适合
KRB5PLACEHOLD_51 KRB5PLACEHOLD_59
-1765328333L -1765328325L
KRB5 错误码 51 59(保留)
KRB5KRB_ERR_GENERIC
-1765328324L
一般性错误
KRB5KRB_ERR_FIELD_TOOLONG
-1765328323L
字段对于此实现太长
KRB5PLACEHOLD_62 KRB5PLACEHOLD_127
-1765328322L -1765328257L
KRB5 错误码 62 127(保留)
未返回值
-1765328256L
仅供内部使用
KRB5_LIBOS_BADLOCKFLAG
-1765328255L
文件锁定模式的标志无效
KRB5_LIBOS_CANTREADPWD
-1765328254L
无法读取口令
KRB5_LIBOS_BADPWDMATCH
-1765328253L
口令不匹配
KRB5_LIBOS_PWDINTR
-1765328252L
口令读取中断
KRB5_PARSE_ILLCHAR
-1765328251L
组件名称存在非法字符
KRB5_PARSE_MALFORMED
-1765328250L
主体的错误格式表示
KRB5_CONFIG_CANTOPEN
-1765328249L
无法打开/找到 Kerberos /etc/krb5/krb5 配置文件
KRB5_CONFIG_BADFORMAT
-1765328248L
Kerberos /etc/krb5/krb5 配置文件的格式不正确
KRB5_CONFIG_NOTENUFSPACE
-1765328247L
空间不足,无法返回完整信息
KRB5_BADMSGTYPE
-1765328246L
为编码指定了无效的消息类型
KRB5_CC_BADNAME
-1765328245L
凭证高速缓存名称格式错误

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

下表列出了 Kerberos v5 中状态码 4 的返回的次状态消息。

表 C-8  Kerberos v5 状态码 4
次状态
含义
KRB5_CC_UNKNOWN_TYPE
-1765328244L
未知的凭证高速缓存类型
KRB5_CC_NOTFOUND
-1765328243L
未找到匹配的凭证
KRB5_CC_END
-1765328242L
到达凭证高速缓存的结尾
KRB5_NO_TKT_SUPPLIED
-1765328241L
请求未提供票证
KRB5KRB_AP_WRONG_PRINC
-1765328240L
请求中的主体错误
KRB5KRB_AP_ERR_TKT_INVALID
-1765328239L
票证具有无效的标志集
KRB5_PRINC_NOMATCH
-1765328238L
请求的主体和票证不匹配
KRB5_KDCREP_MODIFIED
-1765328237L
KDC 回复与预期情况不匹配
KRB5_KDCREP_SKEW
-1765328236L
KDC 回复中的时钟相位差太大
KRB5_IN_TKT_REALM_MISMATCH
-1765328235L
初始票证请求中的客户机/服务器领域不匹配
KRB5_PROG_ETYPE_NOSUPP
-1765328234L
程序缺少加密类型支持
KRB5_PROG_KEYTYPE_NOSUPP
-1765328233L
程序缺少密钥类型支持
KRB5_WRONG_ETYPE
-1765328232L
消息中未使用请求的加密类型
KRB5_PROG_SUMTYPE_NOSUPP
-1765328231L
程序缺少校验和类型支持
KRB5_REALM_UNKNOWN
-1765328230L
找不到请求领域的 KDC
KRB5_SERVICE_UNKNOWN
-1765328229L
Kerberos 服务未知
KRB5_KDC_UNREACH
-1765328228L
无法访问请求领域的任何 KDC
KRB5_NO_LOCALNAME
-1765328227L
未找到主体名称的本地名称
KRB5_MUTUAL_FAILED
-1765328226L
相互验证失败
KRB5_RC_TYPE_EXISTS
-1765328225L
已注册重放高速缓存类型
KRB5_RC_MALLOC
-1765328224L
无更多内存可供分配(用重放高速缓存代码)
KRB5_RC_TYPE_NOTFOUND
-1765328223L
重放高速缓存类型未知

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

下表列出了 Kerberos v5 中状态码 5 的返回的次状态消息。

表 C-9  Kerberos v5 状态码 5
次状态
含义
KRB5_RC_UNKNOWN
-1765328222L
一般性未知 RC 错误
KRB5_RC_REPLAY
-1765328221L
消息为重放
KRB5_RC_IO
-1765328220L
重放 I/O 操作失败
KRB5_RC_NOIO
-1765328219L
重放高速缓存类型不支持非易失性存储
KRB5_RC_PARSE
-1765328218L
重放高速缓存名称解析和格式错误
KRB5_RC_IO_EOF
-1765328217L
重放高速缓存 I/O 的文件结束
KRB5_RC_IO_MALLOC
-1765328216L
无更多内存可供分配(用重放高速缓存 I/O 代码)
KRB5_RC_IO_PERM
-1765328215L
重放高速缓存代码中权限被拒绝
KRB5_RC_IO_IO
-1765328214L
重放高速缓存 I/O 代码中的 I/O 错误
KRB5_RC_IO_UNKNOWN
-1765328213L
一般性未知 RC/IO 错误
KRB5_RC_IO_SPACE
-1765328212L
存储重放信息的系统空间不足
KRB5_TRANS_CANTOPEN
-1765328211L
无法打开/找到领域转换文件
KRB5_TRANS_BADFORMAT
-1765328210L
领域转换文件的格式不正确
KRB5_LNAME_CANTOPEN
-1765328209L
无法打开或找到 lname 转换数据库
KRB5_LNAME_NOTRANS
-1765328208L
不能对请求的主体进行转换
KRB5_LNAME_BADFORMAT
-1765328207L
转换数据库项的格式不正确
KRB5_CRYPTO_INTERNAL
-1765328206L
密码系统内部错误
KRB5_KT_BADNAME
-1765328205L
密钥表名称格式错误
KRB5_KT_UNKNOWN_TYPE
-1765328204L
未知的密钥表类型
KRB5_KT_NOTFOUND
-1765328203L
未找到密钥表项
KRB5_KT_END
-1765328202L
到达密钥表的结尾
KRB5_KT_NOWRITE
-1765328201L
无法写入指定的密钥表

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

下表列出了 Kerberos v5 中状态码 6 的返回的次状态消息。

表 C-10  Kerberos v5 状态码 6
次状态
含义
KRB5_KT_IOERR
-1765328200L
写入密钥表时出错
KRB5_NO_TKT_IN_RLM
-1765328199L
找不到请求领域的票证
KRB5DES_BAD_KEYPAR
-1765328198L
DES 密钥包含错误的奇偶校验
KRB5DES_WEAK_KEY
-1765328197L
DES 密钥为弱密钥
KRB5_BAD_ENCTYPE
-1765328196L
错误的加密类型
KRB5_BAD_KEYSIZE
-1765328195L
密钥大小与加密类型不兼容
KRB5_BAD_MSIZE
-1765328194L
消息大小与加密类型不兼容
KRB5_CC_TYPE_EXISTS
-1765328193L
已注册凭证高速缓存类型
KRB5_KT_TYPE_EXISTS
-1765328192L
已注册密钥表类型
KRB5_CC_IO
-1765328191L
凭证高速缓存 I/O 操作失败
KRB5_FCC_PERM
-1765328190L
凭证高速缓存文件权限不正确
KRB5_FCC_NOFILE
-1765328189L
未找到凭证高速缓存文件
KRB5_FCC_INTERNAL
-1765328188L
内部文件凭证高速缓存错误
KRB5_CC_WRITE
-1765328187L
写入凭证高速缓存文件时出错
KRB5_CC_NOMEM
-1765328186L
没有更多内存可供分配(用凭证高速缓存代码)
KRB5_CC_FORMAT
-1765328185L
凭证高速缓存中的格式错误
KRB5_INVALID_FLAGS
-1765328184L
无效的 KDC 选项组合,即内部库错误
KRB5_NO_2ND_TKT
-1765328183L
请求缺失的第二个票证
KRB5_NOCREDS_SUPPLIED
-1765328182L
未向库例程提供凭证
KRB5_SENDAUTH_BADAUTHVERS
-1765328181L
发送了错误的 sendauth 版本
KRB5_SENDAUTH_BADAPPLVERS
-1765328180L
sendauth 发送了错误的应用程序版本
KRB5_SENDAUTH_BADRESPONSE
-1765328179L
错误响应(sendauth 交换期间)
KRB5_SENDAUTH_REJECTED
-1765328178L
服务器在执行 sendauth 交换期间拒绝验证

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

下表列出了 Kerberos v5 中状态码 7 的返回的次状态消息。

表 C-11  Kerberos v5 状态码 7
次状态
含义
KRB5_PREAUTH_BAD_TYPE
-1765328177L
预验证类型不受支持
KRB5_PREAUTH_NO_KEY
-1765328176L
未提供所需的预验证密钥
KRB5_PREAUTH_FAILED
-1765328175L
一般性预验证故障
KRB5_RCACHE_BADVNO
-1765328174L
重放高速缓存的格式版本号不受支持
KRB5_CCACHE_BADVNO
-1765328173L
凭证高速缓存格式版本号不受支持
KRB5_KEYTAB_BADVNO
-1765328172L
密钥表格式的版本号不受支持
KRB5_PROG_ATYPE_NOSUPP
-1765328171L
程序缺少地址类型支持
KRB5_RC_REQUIRED
-1765328170L
消息重放检测需要 rcache 参数
KRB5_ERR_BAD_HOSTNAME
-1765328169L
主机名无法规范
KRB5_ERR_HOST_REALM_UNKNOWN
-1765328168L
主机名无法规范
KRB5_SNAME_UNSUPP_NAMETYPE
-1765328167L
未针对名称类型定义转换到服务主体
KRB5KRB_AP_ERR_V4_REPLY
-1765328166L
最初的票证响应似乎为版本 4 错误
KRB5_REALM_CANT_RESOLVE
-1765328165L
无法解析请求领域的 KDC
KRB5_TKT_NOT_FORWARDABLE
-1765328164L
请求票证无法获取可转发票证
KRB5_FWD_BAD_PRINCIPAL
-1765328163L
尝试转发凭证时的错误主体名称
KRB5_GET_IN_TKT_LOOP
-1765328162L
在 krb5_get_in_tkt 中检测到循环
KRB5_CONFIG_NODEFREALM
-1765328161L
配置文件 /etc/krb5/krb5.conf 未指定缺省领域
KRB5_SAM_UNSUPPORTED
-1765328160L
obtain_sam_padata 中的 SAM 标志错误
KRB5_KT_NAME_TOOLONG
-1765328159L
密钥表名字太长
KRB5_KT_KVNONOTFOUND
-1765328158L
密钥表中的主体的密钥版本号不正确
KRB5_CONF_NOT_CONFIGURED
-1765328157L
未配置 Kerberos /etc/krb5/krb5.conf 配置文件
ERROR_TABLE_BASE_krb5
-1765328384L
缺省值