JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11 开发者安全性指南     Oracle Solaris 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.  Oracle Solaris 密钥管理框架介绍

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

B.  GSS-API 参考

C.  指定 OID

包含 OID 值的文件

/etc/gss/mech 文件

/etc/gss/qop 文件

gss_str_to_oid() 函数

构造机制 OID

createMechOid() 函数

指定非缺省机制

D.  SASL 示例的源代码

E.  SASL 参考表

词汇表

索引

构造机制 OID

由于无法始终使用 gss_str_to_oid(),因此提供了多种用于查找和选择机制的备用方法。 一种方法是手动构造机制 OID,然后将该机制与一组可用的机制进行比较。 另一种方法是获取一组可用机制并从其中选择一个机制。

gss_OID 类型的格式如下:

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

其中,此结构的 elements 字段指向八位字节字符串的第一个字节,该字符串中包含 gss_OID 的常规 BER TLV 编码的值部分的 ASN.1 BER 编码。 length 字段包含该值中的字节数。 例如,对应于 DASS X.509 验证机制的 gss_OID 值包含一个值为 7 的 length 字段和一个指向以下八位字节值的 elements 字段:53,14,2,207,163,7,5

构造机制 OID 的一种方法是声明 gss_OID,然后手动初始化表示指定机制的元素。 如上所述,elements 值的输入可以是从表中获取的硬编码值,也可以由用户输入。 此方法比使用 gss_str_to_oid() 稍微麻烦些,但是二者的效果相同。

然后,可以将所构造的 gss_OIDgss_indicate_mechs()gss_inquire_mechs_for_name() 函数已返回的一组可用机制进行比较。 应用程序可以使用 gss_test_oid_set_member() 函数来检查这组可用机制中是否存在所构造的机制 OID。 如果 gss_test_oid_set_member() 没有返回错误,则表明可以将所构造的 OID 用作 GSS-API 事务的机制。

构造预设 OID 的另一种方法是使应用程序使用 gss_indicate_mechs()gss_inquire_mechs_for_name() 来获取可用机制的 gss_OID_setgss_OID_set 具有以下格式:

typedef struct gss_OID_set_desc_struct {
     OM_uint32 length;
     void           *elements;
} gss_OID_set_desc, *gss_OID_set;

其中,每个元素都是一个表示相应机制的 gss_OID。 应用程序随后会解析每个机制并显示其数值表示形式。 用户可以使用所显示的数值来选择机制。 然后,应用程序会将该机制设置为 gss_OID_set 的相应成员。 应用程序还可以将所需的机制与首选机制的列表进行比较。

createMechOid() 函数

说明此函数的目的是为了保持代码完整。 通常,应当使用 GSS_C_NULL_OID 所指定的缺省机制。

示例 C-3 createMechOid() 函数

gss_OID createMechOid(const char *mechStr)
{
        gss_buffer_desc mechDesc;
        gss_OID mechOid;
        OM_uint32 minor;

        if (mechStr == NULL)
                return (GSS_C_NULL_OID);

        mechDesc.length = strlen(mechStr);
        mechDesc.value = (void *) mechStr;

        if (gss_str_to_oid(&minor, &mechDesc, &mechOid) !
            = GSS_S_COMPLETE) {
                fprintf(stderr, "Invalid mechanism oid specified <%s>",
                                mechStr);
                return (GSS_C_NULL_OID);
        }

        return (mechOid);
}