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 |
---|---|
|
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. |
|
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 |