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


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

Метод InitializeFromCertificate инициализирует запрос сертификата с помощью существующего сертификата. Сертификат содержится в массиве байтов, закодированном с помощью правил различаемой кодировки (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 должен быть четным числом шестнадцатеричных цифр.
  • Пробелы между шестнадцатеричными парами игнорируются.
  • Параметр кодирования должен иметь значение XCN_CRYPT_STRING_HEXRAW.
  • Параметр Context определяет, выполняются ли поиски локальные или компьютерные хранилища.
  • Если требуется закрытый ключ, поиск выполняется только в личных хранилищах и хранилищах запросов.
  • Если закрытый ключ не нужен, то в корневом и промежуточном хранилищах ЦС также выполняется поиск.

[in] Encoding

Значение перечисления EncodeType , указывающее тип кодирования, примененный к сертификату в кодировке DER. Значение по умолчанию — XCN_CRYPT_STRING_BASE64.

[in] InheritOptions

Значение перечисления X509RequestInheritOptions , указывающее, как создать объект запроса сертификата из существующего сертификата. Вы можете указать, как наследовать ключ, выбрав одно из следующих значений. Значение по умолчанию — InheritDefault.

Ценность Meaning
НаследованиеDefault
Поставщик и наследование ключей не указаны.
НаследованиеNewDefaultKey
Создает новый ключ, но наследует поставщик шифрования по умолчанию.
НаследованиеNewSimilarKey
Создает новый ключ, но наследует поставщик шифрования, используемый для создания существующего сертификата.
InheritPrivateKey
Наследует закрытые и открытые ключи.
InheritPublicKey
Наследует только открытый ключ.
 

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

Ценность Meaning
InheritRenewalCertificateFlag
Наследует сертификат продления. Указание этого флага задает значение ICertPropertyRenewal .
НаследованиеTemplateFlag
Наследует шаблон сертификата.
НаследованиеSubjectFlag
Наследует различающееся имя субъекта.
НаследованиеExtensionsFlag
Наследует соответствующие расширения от сертификата.
НаследованиеSubjectAltNameFlag
Наследует расширение SubjectAlternativeName .
НаследованиеValidityPeriodFlag
Наследует срок действия.
 

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

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

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

  • НаследованиеSubjectFlag
  • НаследованиеExtensionsFlag
  • НаследованиеValidityPeriodFlag
  • InheritTemplateFlag (если сертификат содержит расширение шаблона)
  • InheritRenewalCertificateFlag (если клиент обновляет сертификат)

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

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

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

Код возврата Description
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 [только классические приложения]
целевая платформа Виндоус
Header certenroll.h
DLL CertEnroll.dll

См. также

IX509CertificateRequestPkcs7