Función CertCreateSelfSignCertificate (wincrypt.h)

La función CertCreateSelfSignCertificate compila un certificado autofirmado y devuelve un puntero a una estructura de CERT_CONTEXT que representa el certificado.

Sintaxis

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
);

Parámetros

[in, optional] hCryptProvOrNCryptKey

Identificador de un proveedor criptográfico usado para firmar el certificado creado. Si es NULL, la información del parámetro pKeyProvInfo se usa para adquirir el identificador necesario. Si pKeyProvInfo también es NULL, se usa el tipo de proveedor predeterminado, PROV_RSA_FULL tipo de proveedor, la especificación de clave predeterminada, AT_SIGNATURE y un contenedor de claves recién creado con un nombre de contenedor único.

Este identificador debe ser un identificador HCRYPTPROV que se ha creado mediante la función CryptAcquireContext o un identificador de NCRYPT_KEY_HANDLE que se ha creado mediante la función NCryptOpenKey . Las nuevas aplicaciones siempre deben pasar el identificador NCRYPT_KEY_HANDLE de un proveedor de servicios criptográficos (CSP) CNG.

[in] pSubjectIssuerBlob

Puntero a un BLOB que contiene el nombre distintivo (DN) del firmante del certificado. Este parámetro no puede ser NULL. Como mínimo, se debe proporcionar un puntero a un DN vacío. Normalmente, este BLOB se crea mediante la función CertStrToName . También se puede crear mediante la función CryptEncodeObject y especificando el X509_NAME o X509_UNICODE_NAME StructType.

[in] dwFlags

Conjunto de marcas que invalidan el comportamiento predeterminado de esta función. Puede ser cero o una combinación de uno o varios de los valores siguientes.

Valor Significado
CERT_CREATE_SELFSIGN_NO_KEY_INFO
2
De forma predeterminada, el PCCERT_CONTEXT devuelto hace referencia a las claves privadas estableciendo el CERT_KEY_PROV_INFO_PROP_ID. Si no desea que el PCCERT_CONTEXT devuelto haga referencia a claves privadas estableciendo el CERT_KEY_PROV_INFO_PROP_ID, especifique CERT_CREATE_SELFSIGN_NO_KEY_INFO.
CERT_CREATE_SELFSIGN_NO_SIGN
1
De forma predeterminada, el certificado que se va a crear está firmado. Si el certificado que se crea es solo un marcador de posición ficticio, es posible que no sea necesario firmar el certificado. La firma del certificado se omite si se especifica CERT_CREATE_SELFSIGN_NO_SIGN.

[in, optional] pKeyProvInfo

Puntero a una estructura CRYPT_KEY_PROV_INFO . Antes de crear un certificado, se consulta el CSP para el proveedor de claves, el tipo de proveedor de claves y el nombre del contenedor de claves . Si el CSP consultado no admite estas consultas, se produce un error en la función. Si el proveedor predeterminado no admite estas consultas, se debe especificar un valor pKeyProvInfo . RSA BASE admite estas consultas.

Si el parámetro pKeyProvInfo no es NULL, los valores correspondientes se establecen en el valor CERT_KEY_PROV_INFO_PROP_ID del certificado generado. Debe asegurarse de que todos los parámetros de la estructura proporcionada se especifican correctamente.

[in, optional] pSignatureAlgorithm

Puntero a una estructura de CRYPT_ALGORITHM_IDENTIFIER . Si es NULL, se usa el algoritmo predeterminado, SHA1RSA.

[in, optional] pStartTime

Puntero a una estructura SYSTEMTIME . Si es NULL, la hora actual del sistema se usa de forma predeterminada.

[in, optional] pEndTime

Puntero a una estructura SYSTEMTIME . Si es NULL, el valor de pStartTime más un año se usará de forma predeterminada.

[optional] pExtensions

Puntero a una matriz de CERT_EXTENSIONS de estructuras de CERT_EXTENSION . De forma predeterminada, la matriz está vacía. Si lo desea, se puede especificar un nombre de sujeto alternativo como una de estas extensiones.

Valor devuelto

Si la función se realiza correctamente, se devuelve una variable PCCERT_CONTEXT que apunta al certificado creado. Si se produce un error en la función, devuelve NULL. Para obtener información de error extendida, llame a GetLastError.

Comentarios

Dado que pEndTime debe ser una fecha válida y se genera automáticamente si el usuario no lo proporciona, los errores inesperados pueden deberse fácilmente cuando se llama a esta API en un día bisiesto sin que la lógica de la aplicación lo compense. Para obtener más información, consulte Preparación para año bisiesto.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado wincrypt.h
Library Crypt32.lib
Archivo DLL Crypt32.dll

Consulte también

CERT_EXTENSION

CERT_EXTENSIONS

CRYPT_ALGORITHM_IDENTIFIER

CertStrToName

CryptEncodeObject

Obtener último error

PCCERT_CONTEXT

SYSTEMTIME