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


Метод IX509CertificateRequestPkcs7::InitializeFromCertificate (certenroll.h)

Метод InitializeFromCertificate инициализирует запрос сертификата, используя существующий сертификат. Сертификат содержится в массиве байтов, закодированном с помощью Distinguished Encoding Rules (DER), как определено в стандарте ASN.1. Массив байтов в кодировке DER представлен строкой, которая является либо чистой двоичной последовательностью, либо кодировкой Юникода.

Синтаксис

HRESULT InitializeFromCertificate(
  [in] X509CertificateEnrollmentContext Context,
  [in] VARIANT_BOOL                     RenewalRequest,
  [in] BSTR                             strCertificate,
  [in] EncodingType                     Encoding,
  [in] X509RequestInheritOptions        InheritOptions
);

Параметры

[in] Context

Значение перечисления X509CertificateEnrollmentContext , указывающее, предназначен ли запрошенный сертификат для конечного пользователя, компьютера или администратора, действующего от имени компьютера.

[in] RenewalRequest

VARIANT_BOOL, указывающий, запрашивает ли конечная сущность продление сертификата, определенного параметром strCertificate.

[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
Наследует только открытый ключ.
 

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

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

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

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

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

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

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

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

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

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

Комментарии

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

  • Создает объект запроса PKCS #10 из сертификата, контекста регистрации и параметров наследования, указанных во входных данных. Объект PKCS #10 наследует:
    • Шаблон, если он существует в исходном сертификате, и вы задали значение InheritTemplateFlag .
    • Различающееся имя субъекта, если указано InheritSubjectFlag.
    • Альтернативное имя субъекта, если указано InheritSubjectAltNameFlag.
    • Расширения, если вы указываете InheritExtensionsFlag.
  • Копирует исходный сертификат, если он требуется продлить, в свойство RenewCertificate в новом запросе PKCS #10.
  • Создает ISignerCertificate из исходного сертификата, если он требуется продлить, и задает его для свойства SignerCertificate .
  • Задает запрос PKCS #10 в качестве объекта внутреннего запроса.

Требования

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

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

IX509CertificateRequestPkcs7