Solaris 开发者安全性指南

附录 B GSS-API 参考

本附录包括以下几节:

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

GSS-API 函数

Solaris 软件实现了 GSS-API 函数。有关每个函数的更多信息,请参见其手册页。另请参见早期 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 的函数

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

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

重命名的函数

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

GSS-API 状态码

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

图 B–1 主状态编码

图中显示在 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 

不能读取所需的输入参数 

GSS_S_CALL_INACCESSIBLE_WRITE 

不能写入所需的输出参数 

GSS_S_CALL_BAD_STRUCTURE 

参数格式错误 

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

表 B–2 GSS-API 例程错误

错误 

字段中的值 

含义 

GSS_S_BAD_MECH 

请求不受支持的机制。 

GSS_S_BAD_NAME 

提供无效名称。 

GSS_S_BAD_NAMETYPE 

提供的名称属于不受支持的类型。 

GSS_S_BAD_BINDINGS 

提供不正确的通道绑定。 

GSS_S_BAD_STATUS 

提供无效状态码。 

GSS_S_BAD_MIC、GSS_S_BAD_SIG 

令牌具有无效的 MIC。 

GSS_S_NO_CRED 

凭证不可用、不可访问或不受支持。 

GSS_S_NO_CONTEXT 

未建立上下文。 

GSS_S_DEFECTIVE_TOKEN 

令牌无效。 

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 

该令牌是早期令牌的副本。 

GSS_S_OLD_TOKEN 

令牌的有效期限已过期。 

GSS_S_UNSEQ_TOKEN 

已处理后面的令牌。 

GSS_S_GAP_TOKEN 

未收到预期的每条消息令牌。 

有关状态码的更多信息,请参见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 定义的所有宏一次可以评估多个参数。

GSS-API 数据类型和值

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

基本 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;

名称类型

名称类型指示关联名称的格式。有关名称和名称类型的更多信息,请参见GSS-API 中的名称GSS-API OID。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 地址。通道绑定将在在 GSS-API 中使用通道绑定中讨论。

表 B–4 通道绑定地址类型

字段 

值(十进制) 

地址类型 

GSS_C_AF_UNSPEC 

未指定的地址类型 

GSS_C_AF_LOCAL 

本地主机 

GSS_C_AF_INET 

Internet 地址类型,例如 IP 

GSS_C_AF_IMPLINK 

ARPAnet IMP  

GSS_C_AF_PUP 

pup 协议,例如 BSP 

GSS_C_AF_CHAOS 

MIT CHAOS 协议 

GSS_C_AF_NS 

XEROX NS 

GSS_C_AF_NBS 

nbs 

GSS_C_AF_ECMA 

ECMA 

GSS_C_AF_DATAKIT 

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

特定于 Sun 的函数

Sun 实现中没有自定义的 GSS-API 函数。

人工可读的名称语法

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

Sun 的 gss_display_name() 实现按以下方式显示名称。如果 input_name 参数表示用户主体,则 gss_display_name() 将返回 user_principal@realm 作为 output_name_buffer,返回 gss_OID 值作为 output_name_type。如果 Kerberos v5 是基础机制,则 gss_OID1.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。Sun 实现支持的其他有效可列显名称不应以尖括号 (<>) 括起。

实现选定数据类型

以下数据类型已作为指针实现,但某些实现可能将这些类型指定为算术类型:gss_cred_tgss_ctx_id_tgss_name_t

删除上下文和存储数据

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

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

保护通道绑定信息

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

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

上下文导出和进程间令牌

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

支持的凭证类型

Sun 的 GSS-API 实现支持通过 gss_acquire_cred() 获取 GSS_C_INITIATEGSS_C_ACCEPTGSS_C_BOTH 凭证。

凭证到期

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

上下文到期

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

回绕大小限制和 QOP 值

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

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

使用 minor_status 参数

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

Kerberos v5 状态码

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

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

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

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

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

表 B–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 的返回的次状态消息。

表 B–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 的返回的次状态消息。

表 B–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 的返回的次状态消息。

表 B–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 的返回的次状态消息。

表 B–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 的返回的次状态消息。

表 B–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 的返回的次状态消息。

表 B–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 

缺省值