Объекты сертификата

Объекты сертификатов хранят:

Класс объекта (CKA_CLASS) равен CKO_CERTIFICATE.

Таблица ниже описывает общие атрибуты объектов сертификатов, в дополнение к общим атрибутам хранения.

Атрибут Тип данных Значение
CKA_CERTIFICATE_TYPE1 CK_CERTIFICATE_TYPE Тип сертификата.
CKA_TRUSTED10 CK_BBOOL CK_TRUE – сертификат является доверенным для приложения, создавшего его.
CKA_CERTIFICATE_CATEGORY CK_ULONG
Категория сертификата:
  • 0 – не указано;
  • 1 – пользователь носителя;
  • 2 – удостоверяющий центр;
  • 3 – иное лицо.

По умолчанию – 0.

CKA_CHECK_VALUE
Byte Array
(массив CK_BYTE)
Контрольная сумма.
CKA_START_DATE CK_DATE

Начальная дата сертификата.

По умолчанию – пусто.

CKA_END_DATE CK_DATE

Конечная дата сертификата.

По умолчанию – пусто.

CKA_COMPRESSED CK_BBOOL

CK_TRUE – включить компрессию данных.

Атрибут является разработкой Аладдин Р.Д. и не входит в стандарт PKCS #11.

Применим к апплетам:
  • Криптотокен;
  • Криптотокен 2 ЭП;
  • Laser;
  • Datastore.

По умолчанию – CK_FALSE.

1 – Указывается, когда объект создается с использованием C_CreateObject().
10 – Может быть выставляться в 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 содержат сертификаты открытых ключей X.509.

Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509.

Таблица ниже описывает атрибуты объектов сертификатов открытых ключей, в дополнение к общим атрибутам класса.

Атрибут Тип данных Значение
CKA_SUBJECT1
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_VALUE2
Byte Array
(массив CK_BYTE)
Тело сертификата в BER формате.
CKA_URL3
RFC2279 string
(массив CK_UTF8CHAR)

URL, где можно получить полный сертификат

По умолчанию – пусто.

CKA_HASH_OF_SUBJECT_PUBLIC_KEY4
Byte Array
(массив CK_BYTE)

Хэш SHA-1 открытого ключа субъекта.

По умолчанию – пусто.

CKA_HASH_OF_ISSUER_PUBLIC_KEY4
Byte Array
(массив CK_BYTE)

Хэш SHA-1 открытого ключа издателя.

По умолчанию – пусто.

CKA_JAVA_MIDP_SECURITY_DOMAIN CK_ULONG
Домен безопасности Java MIDP:
  • 0 – не указано;
  • 1 – пользователь;
  • 2 – оператор;
  • 3 – третье лицо.

По умолчанию – 0.

CKA_NAME_HASH_ALGORITHM CK_MECHANISM_TYPE

Определяет механизм, используемый для вычисления CKA_HASH_OF_SUBJECT_PUBLIC_KEY и CKA_HASH_OF_ISSUER_PUBLIC_KEY.

Если атрибут отсутствует, то по умолчанию используется SHA-1.

1 – Указывается, когда объект создается с использованием C_CreateObject().
2 – Не указывается, когда объект создается с использованием C_CreateObject().
3 – Указывается, когда объект генерируется с использованием C_GenerateKey() или C_GenerateKeyPair().
4 – Не указывается, когда объект генерируется с использованием 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 содержат сертификаты атрибутов X.509.

Тип сертификата (CKA_CERTIFICATE_TYPE) равен CKC_X_509_ATTR_CERT.

Таблица ниже описывает атрибуты объектов сертификатов атрибутов X.509, в дополнение к общим атрибутам класса.

Атрибут Тип данных Значение
CKA_OWNER1
Byte Array
(массив CK_BYTE)
Поле субъекта сертификата атрибутов в DER формате. Значение отличается от CKA_SUBJECT, из в сертификата CKC_X_509, синтаксисом ASN.1 и кодировкой.
CKA_AC_ISSUER
Byte Array
(массив CK_BYTE)

Поле издателя сертификата атрибутов в DER формате. Значение отличается от CKA_ISSUER, из в сертификата CKC_X_509, синтаксисом ASN.1 и кодировкой.

По умолчанию – пусто.

CKA_SERIAL_NUMBER
Byte Array
(массив CK_BYTE)

Серийный номер сертификата в DER формате.

По умолчанию – пусто.

CKA_ATTR_TYPES
Byte Array
(массив CK_BYTE)

Последовательность значений идентификаторов объектов, соответствующим типам атрибутов сертификата, в BER формате. При помощи этого поля можно искать заданный атрибут сертификата без его извлечения и разбора.

По умолчанию – пусто.

CKA_VALUE1
Byte Array
(массив CK_BYTE)
Тело сертификата в BER формате.
1 – Указывается, когда объект создается с использованием 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)}
};