Функция 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

Набор флагов, которые переопределяют поведение этой функции по умолчанию. Это может быть ноль или сочетание одного или нескольких из следующих значений.

Значение Значение
CERT_CREATE_SELFSIGN_NO_KEY_INFO
2
По умолчанию возвращаемый 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
1
По умолчанию создаваемый сертификат подписывается. Если создаваемый сертификат является всего лишь фиктивным заполнителем, возможно, его не нужно подписывать. Подписывание сертификата пропускается, если указано 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

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

CERT_EXTENSION

CERT_EXTENSIONS

CRYPT_ALGORITHM_IDENTIFIER

CertStrToName

CryptEncodeObject

Getlasterror

PCCERT_CONTEXT

SYSTEMTIME