Метод IX509CertificateRequestPkcs10::InitializeFromCertificate (certenroll.h)
Метод InitializeFromCertificate инициализирует запрос сертификата с помощью существующего сертификата. Сертификат содержится в массиве байтов, закодированном с помощью Distinguished Encoding Rules (DER) в соответствии со стандартом Абстрактная синтаксическая нотация 1 (ASN.1). Массив байтов в кодировке DER представлен строкой, которая является либо чистой двоичной последовательностью, либо кодировкой Юникода.
Синтаксис
HRESULT InitializeFromCertificate(
[in] X509CertificateEnrollmentContext Context,
[in] BSTR strCertificate,
[in] EncodingType Encoding,
[in] X509RequestInheritOptions InheritOptions
);
Параметры
[in] Context
Значение перечисления X509CertificateEnrollmentContext , указывающее, предназначен ли запрошенный сертификат для конечного пользователя, компьютера или администратора, действующего от имени компьютера.
[in] strCertificate
Переменная BSTR , содержащая сертификат в кодировке DER.
Начиная с Windows 7 и Windows Server 2008 R2, вы можете указать печатный или серийный номер сертификата, а не закодированный сертификат. Это приводит к тому, что функция будет выполнять поиск соответствующего сертификата в соответствующих локальных хранилищах. Помните на следующие моменты.
- BSTR должно быть четным числом шестнадцатеричных цифр.
- Пробелы между шестнадцатеричными парами игнорируются.
- Параметр Encoding должен иметь значение XCN_CRYPT_STRING_HEXRAW.
- Параметр Context определяет, выполняется ли поиск в хранилищах пользователя или компьютера.
- Если требуется закрытый ключ, выполняется поиск только в личном хранилище и хранилище запросов.
- Если закрытый ключ не требуется, выполняется поиск в корневом и промежуточном хранилищах ЦС.
[in] Encoding
Значение перечисления EncodingType , указывающее тип кодировки Юникода, применяемой к сертификату с кодировкой DER. Значение по умолчанию — XCN_CRYPT_STRING_BASE64.
[in] InheritOptions
Значение перечисления X509RequestInheritOptions , указывающее, как создать объект запроса сертификата из существующего сертификата. Вы можете указать, как наследовать ключ, выбрав одно из следующих значений. Значение по умолчанию — InheritDefault.
Вы также можете использовать побитовую операцию ИЛИ для объединения значения наследования ключа с любым сочетанием следующих значений.
Значение | Значение |
---|---|
|
Наследует сертификат продления. При указании этого флага устанавливается свойство RenewalCertificate . |
|
Наследует шаблон сертификата. |
|
Наследует различающееся имя субъекта. |
|
Наследует соответствующие расширения от сертификата. |
|
Наследует расширение SubjectAlternativeName . |
|
Наследует срок действия. |
Вы также можете указать InheritNone , чтобы запретить реализацию по умолчанию любых флагов в предыдущей таблице (флаги, не связанные с наследованием ключей). Если указать InheritNone, но также указать флаг, не связанный с наследованием ключей, метод возвращает E_INVALIDARG.
Если задать параметр InheritOptions равным нулю (0) или указать InheritDefault и не указать значение наследования ключа, по умолчанию используется InheritNewSimilarKey .
Если задать для параметра InheritOptions нулевое значение (0) или указать InheritDefault и не указать значения, не связанные с наследованием ключей, по умолчанию устанавливаются следующие флаги:
- InheritSubjectFlag
- InheritExtensionsFlag
- InheritValidityPeriodFlag
- InheritTemplateFlag (если сертификат содержит расширение шаблона)
Возвращаемое значение
Если функция выполнена успешно, функция возвращает S_OK.
Если функция завершается сбоем, она возвращает значение HRESULT , указывающее на ошибку. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.
Код возврата | Описание |
---|---|
|
Объект запроса сертификата уже инициализирован. |
Комментарии
Метод InitializeFromCertificate проверяет параметры, указанные в параметре InheritOptions , и инициализирует новый объект запроса PKCS #10, выполняя следующие действия:
- Копирует сертификат продления , если он есть и вы указали InheritRenewalCertificateFlag, из входного сертификата в новый запрос.
- Копирует шаблон, если он указан в существующем сертификате и задано значение InheritTemplateFlag .
- Копирует различающееся имя субъекта в новый запрос, если указан параметр InheritSubjectFlag.
- Копирует альтернативное имя субъекта в новый запрос, если указан параметр InheritSubjectAltNameFlag.
- Копирует расширения в новый запрос, если указан параметр InheritExtensionsFlag.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | certenroll.h |
DLL | CertEnroll.dll |