JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris 11 开发者安全性指南     Oracle Solaris 11.1 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.  编写用户级加密应用程序

Cryptoki 库概述

PKCS #11 函数列表

使用 PKCS #11 的函数

PKCS #11 函数:C_Initialize()

PKCS #11 函数:C_GetInfo()

PKCS #11 函数:C_GetSlotList()

PKCS #11 函数:C_GetTokenInfo()

PKCS #11 函数:C_OpenSession()

PKCS #11 函数:C_GetMechanismList()

扩展的 PKCS #11 函数

扩展的 PKCS #11 函数:SUNW_C_GetMechSession()()

扩展的 PKCS #11 函数:SUNW_C_KeyToObject

用户级加密应用程序示例

消息摘要示例

对称加密示例

签名和验证示例

随机字节生成示例

10.  Oracle Solaris 密钥管理框架介绍

A.  适用于开发者的安全编码准则

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

C.  GSS-API 参考信息

D.  指定 OID

E.  SASL 示例的源代码

F.  SASL 参考信息表

词汇表

索引

请告诉我们如何提高我们的文档:
过于简略
不易阅读或难以理解
重要信息缺失
错误的内容
需要翻译的版本
其他
Your rating has been updated
感谢您的反馈!

您的反馈将非常有助于我们提供更好的文档。 您是否愿意参与我们的内容改进并提供进一步的意见?

Cryptoki 库概述

Oracle Solaris 加密框架中的用户级应用程序通过 libpkcs11.so 模块中所提供的 cryptoki 库来访问 PKCS #11 函数。pkcs11_softtoken.so 模块是由 Oracle Corporation 提供的 PKCS #11 软令牌实现,用于提供加密机制。软令牌插件是缺省的机制源。加密机制还可以通过第三方插件提供。

本节列出了软令牌所支持的 PKCS #11 函数和返回值,返回代码根据插入到框架中的提供者而异。本节还介绍了一些常见的函数。有关 cryptoki 库中所有元素的完整说明,请参阅 libpkcs11(3LIB) 或者 RSA Laboratories Web 站点上的 PKCS #11: Cryptographic Token Interface Standard

确保对所有提供者使用直接绑定。有关更多信息,请参见 ld(1)《链接程序和库指南》

PKCS #11 函数列表

下面列出了 Oracle Solaris 加密框架中的 pkcs11_softtoken.so 所支持的 PKCS #11 函数类别以及相关函数:

使用 PKCS #11 的函数

本节提供了以下使用 PKCS #11 的函数的说明:


注 - 所有的 PKCS #11 函数都可以从 libpkcs11.so 库中获取,不必使用 C_GetFunctionList() 函数来获取可用函数的列表。


PKCS #11 函数:C_Initialize()

C_Initialize() 可用于初始化 PKCS #11 库。C_Initialize() 使用以下语法:

C_Initialize(CK_VOID_PTR pInitArgs);

pInitArgs 是空值 NULL_PTR 或是指向 CK_C_INITIALIZE_ARGS 结构的指针。通过 NULL_PTR,该库可以将 Oracle Solaris 互斥锁用作锁定原语,在多个线程之间仲裁对内部共享结构的访问。请注意,Oracle Solaris 加密框架不接受互斥锁。由于 cryptoki 库的此实现可以安全高效地处理多线程,因此建议使用 NULL_PTR。应用程序还可以使用 pInitArgs 来设置诸如 CKF_LIBRARY_CANT_CREATE_OS_THREADS 之类的标志。C_Finalize() 表示应用程序使用 PKCS #11 库结束会话。


注 - C_Finalize() 绝不应当通过库进行调用。按照惯例,应用程序负责调用 C_Finalize() 来关闭会话。


除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,C_Initialize() 还会使用以下返回值:

PKCS #11 函数:C_GetInfo()

C_GetInfo() 使用的是有关 cryptoki 库的制造商和版本信息。C_GetInfo() 使用以下语法:

C_GetInfo(CK_INFO_PTR pInfo);

C_GetInfo() 会返回以下值:

除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,C_GetInfo() 还可以获取以下返回值:

PKCS #11 函数:C_GetSlotList()

C_GetSlotList() 使用的是可用插槽的列表。如果除了 pkcs11_softtoken.so 以外尚未安装任何其他加密提供者,则 C_GetSlotList() 仅返回缺省插槽。C_GetSlotList() 使用以下语法:

C_GetSlotList(CK_BBOOL tokenPresent, CK_SLOT_ID_PTR pSlotList, 
CK_ULONG_PTR pulCount);

如果 tokenPresent 设置为 TRUE,则会将搜索限制在那些存在令牌的插槽。

如果 pSlotList 设置为 NULL_PTR,则 C_GetSlotlist() 仅返回插槽的数量。pulCount 是指向用于接收插槽计数的位置的指针。

如果 pSlotList 指向用于接收插槽的缓冲区,则 *pulCount 将设置为 CK_SLOT_ID 元素的最大预期数量。在返回时,*pulCount 将设置为 CK_SLOT_ID 元素的实际数量。

通常,PKCS #11 应用程序会调用 C_GetSlotList() 两次。第一次调用 C_GetSlotList() 用于获取进行内存分配的插槽数量,第二次调用 C_GetSlotList() 用于检索插槽。


注 - 不保证插槽的顺序,它会因 PKCS #11 库的每次装入而异。


除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,C_GetSlotlist() 还可以获取以下返回值:

PKCS #11 函数:C_GetTokenInfo()

C_GetTokenInfo() 可用于获取有关特定令牌的信息。C_GetTokenInfo() 使用以下语法:

C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo);

slotID 用于标识令牌的插槽。slotID 必须是由 C_GetSlotList () 返回的有效 ID。pInfo 是指向用于接收令牌信息的位置的指针。

如果 pkcs11_softtoken.so 是所安装的唯一提供者,C_GetTokenInfo() 将返回以下字段和值:

除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,C_GetSlotlist() 还可以获取以下返回值:

以下返回值与具有硬件令牌的插件相关:

PKCS #11 函数:C_OpenSession()

应用程序可使用 C_OpenSession() 来启动特定插槽中具有特定令牌的加密会话。C_OpenSession() 使用以下语法:

C_OpenSession(CK_SLOT_ID slotID, CK_FLAGS flags, CK_VOID_PTR pApplication, 
CK_NOTIFY Notify, CK_SESSION_HANDLE_PTR phSession);

slotID 用于标识插槽。flags 用于指示会话是可读写的还是只读的。pApplication 是应用程序所定义的用于回调的指针。Notify 用于存放可选回调函数的地址。phSession 是指向会话句柄的位置的指针。

除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,C_OpenSession() 还可以获取以下返回值:

以下返回值与具有硬件令牌的插件相关:

PKCS #11 函数:C_GetMechanismList()

C_GetMechanismList() 用于获取指定令牌所支持的机制类型的列表。C_GetMechanismList() 使用以下语法:

C_GetMechanismList(CK_SLOT_ID slotID, CK_MECHANISM_TYPE_PTR pMechanismList, 
CK_ULONG_PTR pulCount);

slotID 用于标识令牌的插槽。pulCount 是指向用于接收机制数量的位置的指针。如果 pMechanismList 设置为 NULL_PTR,则 *pulCount 将返回机制的数量。否则,必须将 *pulCount 设置为列表的大小,pMechanismList 必须指向用于存放列表的缓冲区。

如果已插入 PKCS #11 软令牌,C_GetMechanismList() 将返回以下列出的支持的机制:

除了 CKR_FUNCTION_FAILED、CKR_GENERAL_ERROR、CKR_HOST_MEMORY 和 CKR_OK 以外,C_GetSlotlist() 还使用以下返回值:

以下返回值与具有硬件令牌的插件相关:

扩展的 PKCS #11 函数

除了标准的 PKCS #11 函数以外,Oracle Solaris 加密框架还附带了两个便利函数:

扩展的 PKCS #11 函数:SUNW_C_GetMechSession()()

SUNW_C_GetMechSession() 是一个便利函数,用于初始化 Oracle Solaris 加密框架。该函数随后会使用指定的机制启动会话。SUNW_C_GetMechSession() 使用以下语法:

SUNW_C_GetMechSession(CK_MECHANISM_TYPE mech, C\
K_SESSION_HANDLE_PTR hSession)

mech 参数用于指定要使用的机制。hSession 是指向会话位置的指针。

SUNW_C_GetMechSession() 在内部调用 C_Initialize() 以初始化 cryptoki 库。SUNW_C_GetMechSession() 接着会使用指定的机制调用 C_GetSlotList()C_GetMechanismInfo(),在可用插槽中搜索令牌。如果找到了机制,SUNW_C_GetMechSession() 会调用 C_OpenSession() 来打开会话。

SUNW_C_GetMechSession() 只需要调用一次。不过,多次调用 SUNW_C_GetMechSession() 也不会造成任何问题。

扩展的 PKCS #11 函数:SUNW_C_KeyToObject

SUNW_C_KeyToObject() 用于创建私钥对象。调用程序必须指定要使用的机制以及原始密钥数据。SUNW_C_KeyToObject() 可在内部确定指定机制的密钥类型。通用密钥对象是通过 C_CreateObject() 创建的。SUNW_C_KeyToObject() 接着会调用 C_GetSessionInfo()C_GetMechanismInfo() 来获取插槽和机制。C_SetAttributeValue() 随后会根据机制的类型为密钥对象设置属性标志。