Поделиться через


Метод 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.

Значение Значение
InheritDefault
Поставщик и наследование ключей не указаны.
InheritNewDefaultKey
Создает новый ключ, но наследует поставщика шифрования по умолчанию.
InheritNewSimilarKey
Создает новый ключ, но наследует поставщика шифрования, используемого для создания существующего сертификата.
InheritPrivateKey
Наследует закрытый и открытый ключи.
InheritPublicKey
Наследует только открытый ключ.
 

Вы также можете использовать побитовую операцию ИЛИ для объединения значения наследования ключа с любым сочетанием следующих значений.

Значение Значение
InheritRenewalCertificateFlag
Наследует сертификат продления. При указании этого флага устанавливается свойство RenewalCertificate .
InheritTemplateFlag
Наследует шаблон сертификата.
InheritSubjectFlag
Наследует различающееся имя субъекта.
InheritExtensionsFlag
Наследует соответствующие расширения от сертификата.
InheritSubjectAltNameFlag
Наследует расширение SubjectAlternativeName .
InheritValidityPeriodFlag
Наследует срок действия.
 

Вы также можете указать InheritNone , чтобы запретить реализацию по умолчанию любых флагов в предыдущей таблице (флаги, не связанные с наследованием ключей). Если указать InheritNone, но также указать флаг, не связанный с наследованием ключей, метод возвращает E_INVALIDARG.

Если задать параметр InheritOptions равным нулю (0) или указать InheritDefault и не указать значение наследования ключа, по умолчанию используется InheritNewSimilarKey .

Если задать для параметра InheritOptions нулевое значение (0) или указать InheritDefault и не указать значения, не связанные с наследованием ключей, по умолчанию устанавливаются следующие флаги:

  • InheritSubjectFlag
  • InheritExtensionsFlag
  • InheritValidityPeriodFlag
  • InheritTemplateFlag (если сертификат содержит расширение шаблона)

Возвращаемое значение

Если функция выполнена успешно, функция возвращает S_OK.

Если функция завершается сбоем, она возвращает значение HRESULT , указывающее на ошибку. Допустимые значения включают, но не ограничиваются, значения, приведенные в следующей таблице. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.

Код возврата Описание
HRESULT_FROM_WIN32(ERROR_ALREADY_INITIALIZED)
Объект запроса сертификата уже инициализирован.

Комментарии

Метод InitializeFromCertificate проверяет параметры, указанные в параметре InheritOptions , и инициализирует новый объект запроса PKCS #10, выполняя следующие действия:

  • Копирует сертификат продления , если он есть и вы указали InheritRenewalCertificateFlag, из входного сертификата в новый запрос.
  • Копирует шаблон, если он указан в существующем сертификате и задано значение InheritTemplateFlag .
  • Копирует различающееся имя субъекта в новый запрос, если указан параметр InheritSubjectFlag.
  • Копирует альтернативное имя субъекта в новый запрос, если указан параметр InheritSubjectAltNameFlag.
  • Копирует расширения в новый запрос, если указан параметр InheritExtensionsFlag.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header certenroll.h
DLL CertEnroll.dll

См. также раздел

IX509CertificateRequestPkcs10