Класс UnixEnroll
[API запроса на сертификат]

Создание запросов на сертификат и установка полученных сертификатов. Подробнее...

#include <UnixEnroll.h>

Полный список членов класса

Открытые члены

 UnixEnroll (const CPEnroll::UserCallbacks &callbacks, bool handlePKCS7=false)
 Конструктор.
 ~UnixEnroll ()
 Деструктор.
virtual HRESULT put_EnableSMIMECapabilities (bool value)
 Установить атрибуты S/MIME в запрос PKCS#10 (не реализовано).
virtual HRESULT put_UseExistingKeySet (bool value)
 Использовать существующий ключ в контейнере (не реализовано).
virtual HRESULT put_ContainerName (BSTR cName)
 Задать имя контейнера.
virtual HRESULT put_ProviderType (DWORD pType)
 Задать тип CSP для создания ключа.
virtual HRESULT put_ProviderName (BSTR pName)
 Задать имя CSP для создания ключа.
virtual HRESULT put_GenKeyFlags (DWORD keyFlags)
 Задать свойства закрытого ключа.
virtual HRESULT put_RequestStoreFlags (DWORD storeFlags)
 Задать хранилище запроса и флаги его открытия.
virtual HRESULT put_ProviderFlags (DWORD provFlags)
 Задать флаги открытия CSP.
virtual HRESULT put_KeySpec (DWORD _dwKeySpec)
 Задать тип закрытого ключа.
virtual HRESULT put_LimitExchangeKeyToEncipherment (int value)
 Задать ограничения ключа AT_KEYEXCHANGE.
virtual HRESULT put_CAStoreFlags (DWORD flags)
 Задать хранилище промежуточных УЦ и флаги его открытия.
virtual HRESULT put_MyStoreFlags (DWORD flags)
 Задать хранилище сертификатов пользователя и флаги его открытия.
virtual HRESULT put_RootStoreFlags (DWORD flags)
 Задать доверенное хранилище корневых сертификатов и флаги его открытия.
virtual HRESULT put_MyStoreName (BSTR name)
 Задать имя хранилища сертификатов пользователя.
virtual HRESULT put_DeleteRequestCert (bool value)
 Требуется ли удалять псевдосертификат в хранилище запросов на сертификат.
virtual HRESULT put_WriteCertToCSP (bool value)
 Требуется ли устанавливать сертификат в ключевой контейнер.
virtual HRESULT put_PIN (const CSecurePin &pin)
 Задать PIN (пароль) контейнера.
virtual HRESULT put_SupressAddRootUI (bool value)
 Не запрашивать подтверждения при установке корневого сертификата в хранилище доверенных сертификатов.
virtual HRESULT addExtensionToRequest (LONG flags, BSTR name, BSTR value)
 Добавить расширение в запрос на сертификат.
virtual HRESULT get_InstallToContainerStatus (DWORD *pdwStatus)
 Возвращает код ошибки при установке сертификата в контейнер.
virtual HRESULT createPKCS10 (BSTR rdn, BSTR usage, BSTR *request)
 Создать запрос PKCS#10.
virtual HRESULT createRequest (LONG flags, BSTR rdn, BSTR usage, BSTR *request)
 Создать запрос сертификат.
virtual HRESULT acceptPKCS7 (BSTR msg)
 Обработка PKCS#7 ответа от УЦ.
virtual HRESULT installPKCS7 (BSTR msg)
 Установить сертификат или цепочку сертификатов PKCS#7.
HRESULT installPKCS7Ex (BSTR msg, LONG *plCertInstalled)
 Установить сертификат или цепочку сертификатов PKCS#7.


Подробное описание

Создание запросов на сертификат и установка полученных сертификатов.

Является урезанным аналогом ICertEnroll из Microsoft CryptoAPI.


Конструктор(ы)

UnixEnroll::UnixEnroll ( const CPEnroll::UserCallbacks callbacks,
bool  handlePKCS7 = false 
)

Конструктор.

Аргументы:
callbacks [in] Функции запроса у пользователя
handlePKCS7 [in] В данной версии не используется


Методы

HRESULT UnixEnroll::acceptPKCS7 ( BSTR  msg  )  [virtual]

Обработка PKCS#7 ответа от УЦ.

Аргументы:
msg [in] PKCS#7 сообщение, закодированное в BASE64. Содержит сертификат или цепочку сертификатов, соответствующую запросу
Возвращает:
S_OK - успешно
Заметки:
Цепочка сертификатов, как может содержать корневой сертификат, так и нет, в зависимости от политики конкретного УЦ. Сертификат, ссылающийся на созданный закрытый ключ из запроса, помещается в хранилище MY. Корневой сертификат помещается в хранилище ROOT, остальные сертификаты промежуточных УЦ помещаются в хранилище CA. Если в сообщение PKCS#7 встречается какой-либо корневой сертификат, то у пользователя запрашивается подтверждение. Пользователь может запретить установку самоподписанных сертификатов, которым он не доверяет по тем или иным причинам. Отказ пользователя в установке сертификатов в хранилище ROOT не вызывает отказа для всей операции.

По умолчанию используются хранилища: MY, CA, ROOT и REQUEST, однако пользователь может изменить имена с помощью следующих методов:

virtual HRESULT UnixEnroll::addExtensionToRequest ( LONG  flags,
BSTR  name,
BSTR  value 
) [inline, virtual]

Добавить расширение в запрос на сертификат.

Аргументы:
flags [in] Является ли расширение критичным (critical)
name [in] OID расширения
value [in] Расширение, закодированное в BASE64
Возвращает:
S_OK - успешно
Заметки:
Метод createRequest() добавляет расширения в запрос, а метод createPKCS10() нет.

virtual HRESULT UnixEnroll::createPKCS10 ( BSTR  rdn,
BSTR  usage,
BSTR *  request 
) [inline, virtual]

Создать запрос PKCS#10.

Аргументы:
rdn [in] Уникальное имя (DN) владельца ключа
usage [in] Список OID расширенного использования ключа (Extended Key Usage (EKU))
request [out] Запрос, закодированный в BASE64
Возвращает:
S_OK - успешно
Заметки:
Игнорирует расширения, заданные методом addExtensionToRequest()

Полученная BSTR строка запроса должна быть освобождена функцией SysFreeString()

virtual HRESULT UnixEnroll::createRequest ( LONG  flags,
BSTR  rdn,
BSTR  usage,
BSTR *  request 
) [inline, virtual]

Создать запрос сертификат.

Аргументы:
flags [in] Тип запроса на сертификат
rdn [in] Уникальное имя (DN) владельца ключа
usage [in] Список OID расширенного использования ключа (Extended Key Usage (EKU))
request [out] Запрос, закодированный в BASE64
Возвращает:
S_OK - успешно
Заметки:
Поддерживаются следующие типы запросов на сертификат:
  • XECR_PKCS10_V1_5
  • XECR_PKCS10_V2_0

Добавляет расширения, заданные методом addExtensionToRequest()

Полученная BSTR строка запроса должна быть освобождена функцией SysFreeString()

virtual HRESULT UnixEnroll::get_InstallToContainerStatus ( DWORD *  pdwStatus  )  [inline, virtual]

Возвращает код ошибки при установке сертификата в контейнер.

Аргументы:
pdwStatus [out] код ошибки при установке сертификата в контейнер
Возвращаемые значения:
S_OK успешно (в pdwStatus скопирован код ошибки)
E_INVALIDARG pdwStatus был не задан (==NULL)

HRESULT UnixEnroll::installPKCS7 ( BSTR  msg  )  [virtual]

Установить сертификат или цепочку сертификатов PKCS#7.

Метод installPKCS7 в отличии от acceptPKCS7 не предназначен для установки сертификатов, выпущенных по запросу пользователя. Он предназанчен просто для установки сертификата или цепочки в стандартные хранилища сертификатов.

Аргументы:
msg [in] PKCS#7 сообщение, закодированное в BASE64, которое содержит сертификат или цепочку
Возвращаемые значения:
S_OK успешно
ERROR_CANCELLED операция прервана пользователем
Заметки:
Если в сообщение PKCS#7 встречается какой-либо корневой сертификат, то у пользователя запрашивается подтверждение на его установку.

HRESULT UnixEnroll::installPKCS7Ex ( BSTR  msg,
LONG *  plCertInstalled 
)

Установить сертификат или цепочку сертификатов PKCS#7.

Метод installPKCS7Ex в отличии от acceptPKCS7 не предназначен для установки сертификатов, выпущенных по запросу пользователя. Он предназанчен просто для установки сертификата или цепочки в стандартные хранилища сертификатов.

Аргументы:
msg [in] PKCS#7 сообщение, закодированное в BASE64, которое содержит сертификат или цепочку
plCertInstalled [out] число сертификатов, установленных в локальные хранилища
Возвращаемые значения:
S_OK успешно
ERROR_CANCELLED операция прервана пользователем
Заметки:
Если в сообщение PKCS#7 встречается какой-либо корневой сертификат, то у пользователя запрашивается подтверждение на его установку.

virtual HRESULT UnixEnroll::put_CAStoreFlags ( DWORD  flags  )  [inline, virtual]

Задать хранилище промежуточных УЦ и флаги его открытия.

Значение по умолчанию CERT_SYSTEM_STORE_CURRENT_USER.

Аргументы:
flags [in] Флаги открытия хранилища.
Возвращает:
S_OK - в случае успеха
Заметки:
Для Unix систем допустимые значения хранилищ:
  • CERT_SYSTEM_STORE_CURRENT_USER
  • CERT_SYSTEM_STORE_LOCAL_MACHINE
Описания дополнительных флагов открытия хранилища смотри в описании CertOpenStore().

virtual HRESULT UnixEnroll::put_ContainerName ( BSTR  cName  )  [inline, virtual]

Задать имя контейнера.

Если имя контейнера не задано, то оно генерируется как случайный GUID.

Аргументы:
cName [in] Имя контейнера.
Возвращает:
S_OK - в случае успеха
Заметки:
При использовании UseExistingKeySet, требуется задавать имя контейнера.

virtual HRESULT UnixEnroll::put_DeleteRequestCert ( bool  value  )  [inline, virtual]

Требуется ли удалять псевдосертификат в хранилище запросов на сертификат.

Значение по умолчанию true.

Аргументы:
value [in] Требуется ли удалять.
Возвращает:
S_OK - в случае успеха
Заметки:
При создании ключа и запроса PKCS#10 создаётся псевдосертификат в хранилище запросов. Он служит для ссылки на закрытый ключ и др. до тех пор, пока УЦ не обработает запрос и не вернёт PKCS#7 ответ. По получении PKCS#7 ответа и успешной установки запрошенного сертификата, псевдосертификат удаляется. Для целей отладки или тестирования можно запретить удаление этого псевдосертификата установкой свойства DeleteRequestCert в значение false.

virtual HRESULT UnixEnroll::put_EnableSMIMECapabilities ( bool  value  )  [inline, virtual]

Установить атрибуты S/MIME в запрос PKCS#10 (не реализовано).

Аргументы:
value [in] true - установить.
Возвращает:
S_OK - в случае успеха

virtual HRESULT UnixEnroll::put_GenKeyFlags ( DWORD  keyFlags  )  [inline, virtual]

Задать свойства закрытого ключа.

По умолчанию экспорт закрытого ключа запрещён. Для его разрешения следует использовать флаг CRYPT_EXPORTABLE.

Аргументы:
keyFlags [in] Флаги создания закрытого ключа.
Возвращает:
S_OK - в случае успеха
Заметки:
Полный список флагов смотри в описании CPGenKey() и CryptGenKey().

virtual HRESULT UnixEnroll::put_KeySpec ( DWORD  _dwKeySpec  )  [inline, virtual]

Задать тип закрытого ключа.

Аргументы:
_dwKeySpec [in] Тип закрытого ключа.
Возвращает:
S_OK - в случае успеха
Заметки:
Обычно используемые типы:
  • AT_KEYEXCHANGE - и согласование сессионных ключей шифрования, и ЭЦП;
  • AT_SIGNATURE - только ЭЦП;

Смотри также описания CPGenKey() и CryptGenKey().

virtual HRESULT UnixEnroll::put_LimitExchangeKeyToEncipherment ( int  value  )  [inline, virtual]

Задать ограничения ключа AT_KEYEXCHANGE.

Аргументы:
value [in] Ограничения ключа AT_KEYEXCHANGE.
Возвращает:
S_OK - в случае успеха
Заметки:
Это свойство относится только к ключам типа AT_KEYEXCHANGE. Для ключей типа AT_SIGNATURE его значение может быть произвольным.

Если значения свойства 0 (false), то запрос содержит следующие значение KeyUsage:

  • CERT_DATA_ENCIPHERMENT_KEY_USAGE
  • CERT_KEY_ENCIPHERMENT_KEY_USAGE
  • CERT_DIGITAL_SIGNATURE_KEY_USAGE
  • CERT_NON_REPUDIATION_KEY_USAGE

Если значения свойства не 0 (true), то запрос содержит следующие значение KeyUsage:

  • CERT_DATA_ENCIPHERMENT_KEY_USAGE
  • CERT_KEY_ENCIPHERMENT_KEY_USAGE

virtual HRESULT UnixEnroll::put_MyStoreFlags ( DWORD  flags  )  [inline, virtual]

Задать хранилище сертификатов пользователя и флаги его открытия.

Значение по умолчанию CERT_SYSTEM_STORE_CURRENT_USER.

Аргументы:
flags [in] Флаги открытия хранилища.
Возвращает:
S_OK - в случае успеха
Заметки:
Для Unix систем допустимые значения хранилищ:
  • CERT_SYSTEM_STORE_CURRENT_USER
  • CERT_SYSTEM_STORE_LOCAL_MACHINE
Описания дополнительных флагов открытия хранилища смотри в описании CertOpenStore().

virtual HRESULT UnixEnroll::put_MyStoreName ( BSTR  name  )  [inline, virtual]

Задать имя хранилища сертификатов пользователя.

Значение по умолчанию "My".

Аргументы:
name [in] Имя хранилища.
Возвращает:
S_OK - в случае успеха
Заметки:
Описания возможных имён хранилища смотри в описании CertOpenStore().

virtual HRESULT UnixEnroll::put_PIN ( const CSecurePin pin  )  [inline, virtual]

Задать PIN (пароль) контейнера.

Значение по умолчанию не задано.

Аргументы:
pin [in] PIN (пароль) контейнера.
Возвращает:
S_OK - в случае успеха
Заметки:
Задаёт PIN (пароль) при создании запроса или получении сертификата для работы в режиме CRYPT_SILENT (или при недоступности устройства текстового или графического интерфейса пользователя (TUI или GUI)).

virtual HRESULT UnixEnroll::put_ProviderFlags ( DWORD  provFlags  )  [inline, virtual]

Задать флаги открытия CSP.

Значение по умолчанию 0.

Аргументы:
provFlags [in] Флаги открытия CSP.
Возвращает:
S_OK - в случае успеха
Заметки:
Описания дополнительных флагов открытия CSP смотри в описании CPAcquireContext() и CryptAcquireContext().

virtual HRESULT UnixEnroll::put_ProviderName ( BSTR  pName  )  [inline, virtual]

Задать имя CSP для создания ключа.

Определяет CSP, в котором создаётся закрытый ключ.

Аргументы:
pName [in] Имя CSP.
Возвращает:
S_OK - в случае успеха

virtual HRESULT UnixEnroll::put_ProviderType ( DWORD  pType  )  [inline, virtual]

Задать тип CSP для создания ключа.

Тип CSP определяет алгоритм закрытого ключа.

Аргументы:
pType [in] Тип CSP.
Возвращает:
S_OK - в случае успеха

virtual HRESULT UnixEnroll::put_RequestStoreFlags ( DWORD  storeFlags  )  [inline, virtual]

Задать хранилище запроса и флаги его открытия.

Значение по умолчанию CERT_SYSTEM_STORE_CURRENT_USER.

Аргументы:
storeFlags [in] Флаги открытия хранилища.
Возвращает:
S_OK - в случае успеха
Заметки:
Для Unix систем допустимые значения хранилищ:
  • CERT_SYSTEM_STORE_CURRENT_USER
  • CERT_SYSTEM_STORE_LOCAL_MACHINE
Описания дополнительных флагов открытия хранилища смотри в описании CertOpenStore().

virtual HRESULT UnixEnroll::put_RootStoreFlags ( DWORD  flags  )  [inline, virtual]

Задать доверенное хранилище корневых сертификатов и флаги его открытия.

Значение по умолчанию CERT_SYSTEM_STORE_CURRENT_USER.

Аргументы:
flags [in] Флаги открытия хранилища.
Возвращает:
S_OK - в случае успеха
Заметки:
Для Unix систем допустимые значения хранилищ:
  • CERT_SYSTEM_STORE_CURRENT_USER
  • CERT_SYSTEM_STORE_LOCAL_MACHINE
Описания дополнительных флагов открытия хранилища смотри в описании CertOpenStore().

virtual HRESULT UnixEnroll::put_SupressAddRootUI ( bool  value  )  [inline, virtual]

Не запрашивать подтверждения при установке корневого сертификата в хранилище доверенных сертификатов.

Значение по умолчанию - false.

Аргументы:
value [in] PIN (пароль) контейнера.
Возвращает:
S_OK - в случае успеха
Заметки:
При установке значения true, метод UnixEnroll::askPermissionToAddToRootStore() не будет вызываться.

HRESULT UnixEnroll::put_UseExistingKeySet ( bool  value  )  [virtual]

Использовать существующий ключ в контейнере (не реализовано).

Аргументы:
value [in] true - существующий, false - создать новый.
Возвращает:
S_OK - в случае успеха

virtual HRESULT UnixEnroll::put_WriteCertToCSP ( bool  value  )  [inline, virtual]

Требуется ли устанавливать сертификат в ключевой контейнер.

Значение по умолчанию false.

Аргументы:
value [in] Требуется ли устанавливать.
Возвращает:
S_OK - в случае успеха
Заметки:
Установка сертификата в контейнер дополнительно к его установке в хранилище "My", в основном, предназначено для отделяемых ключевых носителей. При задании значения true, происходит попытка записи сертификата в контейнер, но операция не будет возвращать ошибку даже в том случае, если ключевой носитель не сможет сохранить сертификат. В частности, если это значение true, но ключевой носитель (смарт-карта, USB-токен, USB-флэш и т.п.) не подключен, то ошибки ключевого носителя будут проигнорированны.

Заметки:
Для того, чтобы не вызывалась функция записи сертификата требуется установить значение false.

Используется методами:

Смотри также описания CPSetKeyParam() и CryptSetKeyParam().


Документация по КриптоПро CAPILite. Последние изменения: Tue Sep 8 15:22:55 2020. Создано системой  doxygen 1.4.5-20051109