Функция CertCreateSelfSignCertificate (wincrypt.h)
Функция CertCreateSelfSignCertificate создает самозаверяющий сертификат и возвращает указатель на структуру CERT_CONTEXT , представляющую сертификат.
Синтаксис
PCCERT_CONTEXT CertCreateSelfSignCertificate(
[in, optional] HCRYPTPROV_OR_NCRYPT_KEY_HANDLE hCryptProvOrNCryptKey,
[in] PCERT_NAME_BLOB pSubjectIssuerBlob,
[in] DWORD dwFlags,
[in, optional] PCRYPT_KEY_PROV_INFO pKeyProvInfo,
[in, optional] PCRYPT_ALGORITHM_IDENTIFIER pSignatureAlgorithm,
[in, optional] PSYSTEMTIME pStartTime,
[in, optional] PSYSTEMTIME pEndTime,
[optional] PCERT_EXTENSIONS pExtensions
);
Параметры
[in, optional] hCryptProvOrNCryptKey
Дескриптор поставщика служб шифрования , используемый для подписи созданного сертификата. Если значение РАВНО NULL, для получения необходимого дескриптора используются сведения из параметра pKeyProvInfo . Если pKeyProvInfo также имеет значение NULL, используется тип поставщика по умолчанию, PROV_RSA_FULL тип поставщика, спецификация ключа по умолчанию, AT_SIGNATURE и созданный контейнер ключей с уникальным именем контейнера.
Этот дескриптор должен быть дескриптором HCRYPTPROV , который был создан с помощью функции CryptAcquireContext , или дескриптором NCRYPT_KEY_HANDLE , созданным с помощью функции NCryptOpenKey . Новые приложения всегда должны передавать дескриптор NCRYPT_KEY_HANDLEпоставщика служб шифрования (CSP) CNG.
[in] pSubjectIssuerBlob
Указатель на большой двоичный объект , содержащий различающееся имя (DN) для субъекта сертификата. Этот параметр не может иметь значение NULL. Как минимум, необходимо указать указатель на пустое DN. Этот BLOB обычно создается с помощью функции CertStrToName . Его также можно создать с помощью функции CryptEncodeObject и указать X509_NAME или X509_UNICODE_NAME StructType.
[in] dwFlags
Набор флагов, которые переопределяют поведение этой функции по умолчанию. Это может быть ноль или сочетание одного или нескольких из следующих значений.
Значение | Значение |
---|---|
|
По умолчанию возвращаемый PCCERT_CONTEXT ссылается на закрытые ключи , задав CERT_KEY_PROV_INFO_PROP_ID. Если вы не хотите, чтобы возвращаемый PCCERT_CONTEXT ссылался на закрытые ключи, задав CERT_KEY_PROV_INFO_PROP_ID, укажите CERT_CREATE_SELFSIGN_NO_KEY_INFO. |
|
По умолчанию создаваемый сертификат подписывается. Если создаваемый сертификат является всего лишь фиктивным заполнителем, возможно, его не нужно подписывать. Подписывание сертификата пропускается, если указано CERT_CREATE_SELFSIGN_NO_SIGN. |
[in, optional] pKeyProvInfo
Указатель на структуру CRYPT_KEY_PROV_INFO . Перед созданием сертификата поставщик ключей, тип поставщика ключей и имя контейнера ключей запрашивается поставщиком ключей . Если запрашиваемая CSP не поддерживает эти запросы, функция завершается ошибкой. Если поставщик по умолчанию не поддерживает эти запросы, необходимо указать значение pKeyProvInfo . RSA BASE поддерживает эти запросы.
Если параметр pKeyProvInfo не равен NULL, соответствующие значения задаются в CERT_KEY_PROV_INFO_PROP_ID значении созданного сертификата. Необходимо убедиться, что все параметры предоставленной структуры указаны правильно.
[in, optional] pSignatureAlgorithm
Указатель на структуру CRYPT_ALGORITHM_IDENTIFIER . Если значение РАВНО NULL, используется алгоритм по умолчанию, SHA1RSA.
[in, optional] pStartTime
Указатель на структуру SYSTEMTIME . Если значение РАВНО NULL, по умолчанию используется текущее системное время.
[in, optional] pEndTime
Указатель на структуру SYSTEMTIME . Если значение NULL, по умолчанию будет использоваться значение pStartTime плюс один год.
[optional] pExtensions
Указатель на CERT_EXTENSIONS массив CERT_EXTENSION структур. По умолчанию массив пуст. При необходимости можно указать альтернативное имя субъекта в качестве одного из этих расширений.
Возвращаемое значение
Если функция выполняется успешно, возвращается переменная PCCERT_CONTEXT , указывающая на созданный сертификат. Если функция завершается сбоем, она возвращает значение NULL. Для получения дополнительных сведений об ошибке вызовите Метод GetLastError.
Комментарии
Так как значение pEndTime должно быть допустимой датой и автоматически создается, если оно не предоставлено пользователем, при вызове этого API в високосный день могут быть вызваны непредвиденные сбои без компенсации логики приложения. Дополнительные сведения см. в разделе Готовность к високосным годам.
Требования
Минимальная версия клиента | Windows XP [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2003 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | wincrypt.h |
Библиотека | Crypt32.lib |
DLL | Crypt32.dll |