Класс объекта (CKA_CLASS) равен CKO_CERTIFICATE
.
Таблица ниже описывает общие атрибуты объектов сертификатов, в дополнение к общим атрибутам хранения.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_CERTIFICATE_TYPE 1 |
CK_CERTIFICATE_TYPE |
Тип сертификата. |
CKA_TRUSTED 10 |
CK_BBOOL |
CK_TRUE – сертификат является доверенным для приложения, создавшего его. |
CKA_CERTIFICATE_CATEGORY |
CK_ULONG |
По умолчанию – |
CKA_CHECK_VALUE |
Byte Array
(массив
CK_BYTE ) |
Контрольная сумма. |
CKA_START_DATE |
CK_DATE |
Начальная дата сертификата. По умолчанию – пусто. |
CKA_END_DATE |
CK_DATE |
Конечная дата сертификата. По умолчанию – пусто. |
CKA_COMPRESSED |
CK_BBOOL |
Атрибут является разработкой Аладдин Р.Д. и не входит в стандарт PKCS #11.
По умолчанию – |
C_CreateObject()
.CK_TRUE
только пользователем с правами администратора (SO
).CKA_CERTIFICATE_TYPE
не изменяется после создания объекта. Данная версия PKCS #11 поддерживает следующие типы сертификатов:CKC_X_509
– сертификат открытого ключа X.509;CKC_X_509_ATTR_CERT
– сертификат атрибутов X.509.Атрибут CKA_TRUSTED
не может быть выставлен приложением на CK_TRUE
.
Он должен быть выставлен приложением, инициализирующим носитель или SO носителя.
Доверенные сертификаты не могут быть изменены.
Атрибут CKA_CERTIFICATE_CATEGORY
используется для указания того, является ли сохраняемый сертификат
сертификатом пользователя, для которого соответствующий личный сертификат является доступным
на носителе («пользователь носителя»), сертификатом УЦ («удостоверяющий центр»)
или конечным сертификатом («иного лица»). Данный атрибут не изменяется после создания объекта.
Атрибуты CKA_CERTIFICATE_CATEGORY
и CKA_TRUSTED
вместе будут использоваться
для сопоставления с категориями сертификатов.
В CDF-описании сертификатов сохраняемый сертификат помечен категорией «пользователь носителя».
В CDF-описаниях «trustedCertificates» или «useful- Certificates» сохраняемый сертификат будет
помечен категорией «удостоверяющий центр» или «иное лицо», в зависимости от того,
указывают ли атрибуты CommonCertificateAttribute или CKA_TRUSTED
на то,
принадлежит он к CDF-описаниям trustedCertificates или usefulCertificates.
CKA_CHECK_VALUE
: значение данного сертификата выводится из сертификата по первым трем
байтам значения хэш-функции SHA-1 атрибута CKA_VALUE
объекта сертификата.
Атрибуты CKA_START_DATE
и CKA_END_DATE
используются только для ссылки.
Cryptoki не придает им никакого дополнительного значения.
Когда они присутствуют, приложение отвечает за то, чтобы выставить их на значения,
которые соответствуют полям сертификата «не до» и «не после» (если таковые существуют).
Атрибут CKA_COMPRESSED
позволяет управлять компрессией.
Компрессии подвергается атрибут CKA_VALUE
у объектов CKO_CERTIFICATE
и CKO_DATA
.
Значение атрибута присваивается при создании объекта и не изменяется впоследствии.
Объекты сертификата X.509 содержат сертификаты открытых ключей X.509.
Тип сертификата (CKA_CERTIFICATE_TYPE
) равен CKC_X_509
.
Таблица ниже описывает атрибуты объектов сертификатов открытых ключей, в дополнение к общим атрибутам класса.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_SUBJECT 1 |
Byte Array
(массив
CK_BYTE ) |
Имя субъекта сертификата в DER формате. |
CKA_ID |
Byte Array
(массив
CK_BYTE ) |
Идентификатор для ключевой пары. По умолчанию – пусто. |
CKA_ISSUER |
Byte Array
(массив
CK_BYTE ) |
Имя издателя сертификата в DER формате. По умолчанию – пусто. |
CKA_SERIAL_NUMBER |
Byte Array
(массив
CK_BYTE ) |
Серийный номер сертификата в DER формате. По умолчанию – пусто. |
CKA_VALUE 2 |
Byte Array
(массив
CK_BYTE ) |
Тело сертификата в BER формате. |
CKA_URL 3 |
RFC2279 string
(массив
CK_UTF8CHAR ) |
URL, где можно получить полный сертификат По умолчанию – пусто. |
CKA_HASH_OF_SUBJECT_PUBLIC_KEY 4 |
Byte Array
(массив
CK_BYTE ) |
Хэш SHA-1 открытого ключа субъекта. По умолчанию – пусто. |
CKA_HASH_OF_ISSUER_PUBLIC_KEY 4 |
Byte Array
(массив
CK_BYTE ) |
Хэш SHA-1 открытого ключа издателя. По умолчанию – пусто. |
CKA_JAVA_MIDP_SECURITY_DOMAIN |
CK_ULONG |
По умолчанию – |
CKA_NAME_HASH_ALGORITHM |
CK_MECHANISM_TYPE |
Определяет механизм, используемый для вычисления
Если атрибут отсутствует, то по умолчанию используется SHA-1. |
C_CreateObject()
.C_CreateObject()
.C_GenerateKey()
или C_GenerateKeyPair()
.C_GenerateKey()
или C_GenerateKeyPair()
.Только атрибуты CKA_ID
, CKA_ISSUER
и CKA_SERIAL_NUMBER
можно изменять после создания объекта.
Атрибут CKA_ID
предназначен как средство распознавания множества пар открытый ключ/закрытый ключ,
которые хранятся в одном и том же объекте (независимо от того, хранятся ли они в одном носителе или нет).
Так как ключи распознаются по имени объекта, а также по идентификатору, возможно,
что ключи к различным объектам могут иметь то же значение CKA_ID
, не приводя к неоднозначности.
В интересах совместимости предусмотрено, что имя объекта и идентификатор ключа сертификата будут
совпадать с такими же показателями соответствующих секретных и открытых ключей
(хотя и не требуется, чтобы все они хранились в одном и том же носителе).
Однако Cryptoki не настаивает на такой привязке или даже на уникальности идентификатора ключа для конкретного субъекта;
в частности, приложение может оставить идентификатор ключа пустым.
Атрибуты CKA_ISSUER
и CKA_SERIAL_NUMBER
предназначены для совместимости с PKCS #7
и со стандартом Privacy Enhanced Mail (RFC1421).
В расширениях версии 3 к сертификатам X.509 идентификатор ключа может находиться в сертификате,
значение CKA_ID
будет являться идентичным идентификатору ключа в таком расширении сертификата,
хотя Cryptoki на этом и не настаивает.
Атрибут CKA_URL
обеспечивает поддержку хранения URL в том месте, где должен храниться сертификат вместо самого сертификата.
Хранение URL вместо полного сертификата часто используется в мобильной среде.
Атрибуты CKA_HASH_OF_SUBJECT_PUBLIC_KEY
и CKA_HASH_OF_ISSUER_PUBLIC_KEY
используются для хранения хэшей,
а также открытых ключей субъекта и органа, выдавшего сертификат. Они особенно важны, когда доступен только URL
для сопоставления сертификата с личным ключом, а также при поиске сертификата органа, выдавшего сертификат.
Атрибут CKA_JAVA_MIDP_SECURITY_DOMAIN
связывает сертификат с доменом безопасности Java MIDP.
Шаблон создания объекта сертификата X.509
CK_OBJECT_CLASS class = CKO_CERTIFICATE;
CK_CERTIFICATE_TYPE certType = CKC_X_509;
CK_UTF8CHAR label[] = "A certificate object";
CK_BYTE subject[] = {...};
CK_BYTE id[] = {123};
CK_BYTE certificate[] = {...};
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_CERTIFICATE_TYPE, &certType, sizeof(certType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_SUBJECT, subject, sizeof(subject)},
{CKA_ID, id, sizeof(id)},
{CKA_VALUE, certificate, sizeof(certificate)}
};
Объекты сертификата атрибутов X.509 содержат сертификаты атрибутов X.509.
Тип сертификата (CKA_CERTIFICATE_TYPE
) равен CKC_X_509_ATTR_CERT
.
Таблица ниже описывает атрибуты объектов сертификатов атрибутов X.509, в дополнение к общим атрибутам класса.
Атрибут | Тип данных | Значение |
---|---|---|
CKA_OWNER 1 |
Byte Array
(массив
CK_BYTE ) |
Поле субъекта сертификата атрибутов в DER формате. Значение отличается от CKA_SUBJECT ,
из в сертификата CKC_X_509 , синтаксисом ASN.1 и кодировкой. |
CKA_AC_ISSUER |
Byte Array
(массив
CK_BYTE ) |
Поле издателя сертификата атрибутов в DER формате. Значение отличается от По умолчанию – пусто. |
CKA_SERIAL_NUMBER |
Byte Array
(массив
CK_BYTE ) |
Серийный номер сертификата в DER формате. По умолчанию – пусто. |
CKA_ATTR_TYPES |
Byte Array
(массив
CK_BYTE ) |
Последовательность значений идентификаторов объектов, соответствующим типам атрибутов сертификата, в BER формате. При помощи этого поля можно искать заданный атрибут сертификата без его извлечения и разбора. По умолчанию – пусто. |
CKA_VALUE 1 |
Byte Array
(массив
CK_BYTE ) |
Тело сертификата в BER формате. |
C_CreateObject()
.Только атрибуты CKA_AC_ISSUER
, CKA_SERIAL_NUMBER
и CKA_ATTR_TYPES
можно изменять после создания объекта.
Шаблон создания объекта сертификата атрибутов X.509
CK_OBJECT_CLASS class = CKO_CERTIFICATE;
CK_CERTIFICATE_TYPE certType = CKC_X_509_ATTR_CERT;
CK_UTF8CHAR label[] = "An attribute certificate object";
CK_BYTE owner[] = {...};
CK_BYTE certificate[] = {...};
CK_BBOOL bTrue = CK_TRUE;
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_CERTIFICATE_TYPE, &certType, sizeof(certType)},
{CKA_TOKEN, &bTrue, sizeof(bTrue)},
{CKA_LABEL, label, sizeof(label) - 1},
{CKA_OWNER, owner, sizeof(owner)},
{CKA_VALUE, certificate, sizeof(certificate)}
};