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 参考

C.  指定 OID

包含 OID 值的文件

/etc/gss/mech 文件

/etc/gss/qop 文件

gss_str_to_oid() 函数

构造机制 OID

createMechOid() 函数

指定非缺省机制

D.  SASL 示例的源代码

E.  SASL 参考表

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

词汇表

索引

构造机制 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);
}