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,以及具有唯一容器名称的新创建的 密钥 容器。

此句柄必须是使用 CryptAcquireContext 函数创建的 HCRYPTPROV 句柄,或者是使用 NCryptOpenKey 函数创建的NCRYPT_KEY_HANDLE句柄。 新应用程序应始终传入 CNG 加密服务提供程序的NCRYPT_KEY_HANDLE句柄 (CSP) 。

[in] pSubjectIssuerBlob

指向 BLOB 的指针,该 BLOB 包含证书使用者的可分辨名称 (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 以获取密钥提供程序、密钥提供程序类型和 密钥容器 名称。 如果查询的 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_EXTENSION结构的CERT_EXTENSIONS数组的指针。 默认情况下,数组为空。 如果需要,可将备用使用者名称指定为这些扩展之一。

返回值

如果函数成功,则返回指向所创建证书 的PCCERT_CONTEXT 变量。 如果函数失败,它将返回 NULL。 有关扩展的错误信息,请调用 GetLastError

注解

由于 pEndTime 必须是有效日期,并且如果用户未提供,则自动生成,因此在闰日调用此 API 而不附带应用逻辑进行补偿时,很容易导致意外故障。 有关详细信息,请参阅 闰年就绪情况

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 wincrypt.h
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

CERT_EXTENSION

CERT_EXTENSIONS

CRYPT_ALGORITHM_IDENTIFIER

CertStrToName

CryptEncodeObject

GetLastError

PCCERT_CONTEXT

SYSTEMTIME