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
一组标志,用于替代此函数的默认行为。 这可以是零,也可以是以下一个或多个值的组合。
值 | 含义 |
---|---|
|
默认情况下,返回的 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 以获取密钥提供程序、密钥提供程序类型和 密钥容器 名称。 如果查询的 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 |