Função CertCreateSelfSignCertificate (wincrypt.h)
A função CertCreateSelfSignCertificate cria um certificado autoassinado e retorna um ponteiro para uma estrutura CERT_CONTEXT que representa o certificado.
Sintaxe
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
Um identificador de um provedor criptográfico usado para assinar o certificado criado. Se FOR NULL, as informações do parâmetro pKeyProvInfo serão usadas para adquirir o identificador necessário. Se pKeyProvInfo também for NULL, o tipo de provedor padrão, PROV_RSA_FULL tipo de provedor, a especificação de chave padrão, AT_SIGNATURE e um contêiner de chave recém-criado com um nome de contêiner exclusivo serão usados.
Esse identificador deve ser um identificador HCRYPTPROV que foi criado usando a função CryptAcquireContext ou um identificador NCRYPT_KEY_HANDLE que foi criado usando a função NCryptOpenKey . Os novos aplicativos sempre devem passar o identificador NCRYPT_KEY_HANDLE de um CSP ( provedor de serviços criptográficos ) CNG.
[in] pSubjectIssuerBlob
Um ponteiro para um BLOB que contém o DN (nome diferenciado) para a entidade do certificado. Esse parâmetro não pode ser NULL. Minimamente, um ponteiro para um DN vazio deve ser fornecido. Esse BLOB normalmente é criado usando a função CertStrToName . Ele também pode ser criado usando a função CryptEncodeObject e especificando o X509_NAME ou X509_UNICODE_NAME StructType.
[in] dwFlags
Um conjunto de sinalizadores que substituem o comportamento padrão dessa função. Isso pode ser zero ou uma combinação de um ou mais dos valores a seguir.
Valor | Significado |
---|---|
|
Por padrão, o PCCERT_CONTEXT retornado faz referência às chaves privadas definindo o CERT_KEY_PROV_INFO_PROP_ID. Se você não quiser que o PCCERT_CONTEXT retornado faça referência a chaves privadas definindo o CERT_KEY_PROV_INFO_PROP_ID, especifique CERT_CREATE_SELFSIGN_NO_KEY_INFO. |
|
Por padrão, o certificado que está sendo criado é assinado. Se o certificado que está sendo criado for apenas um espaço reservado fictício, talvez o certificado não precise ser assinado. A assinatura do certificado será ignorada se CERT_CREATE_SELFSIGN_NO_SIGN for especificado. |
[in, optional] pKeyProvInfo
Um ponteiro para uma estrutura CRYPT_KEY_PROV_INFO . Antes de um certificado ser criado, o CSP é consultado para o provedor de chaves, o tipo de provedor de chave e o nome do contêiner de chave . Se o CSP consultado não oferecer suporte a essas consultas, a função falhará. Se o provedor padrão não der suporte a essas consultas, um valor pKeyProvInfo deverá ser especificado. O RSA BASE dá suporte a essas consultas.
Se o parâmetro pKeyProvInfo não for NULL, os valores correspondentes serão definidos no valor CERT_KEY_PROV_INFO_PROP_ID do certificado gerado. Você deve garantir que todos os parâmetros da estrutura fornecida sejam especificados corretamente.
[in, optional] pSignatureAlgorithm
Um ponteiro para uma estrutura CRYPT_ALGORITHM_IDENTIFIER . Se FOR NULL, o algoritmo padrão, SHA1RSA, será usado.
[in, optional] pStartTime
Um ponteiro para uma estrutura SYSTEMTIME . Se FOR NULL, a hora atual do sistema será usada por padrão.
[in, optional] pEndTime
Um ponteiro para uma estrutura SYSTEMTIME . Se NULL, o valor pStartTime mais um ano será usado por padrão.
[optional] pExtensions
Um ponteiro para uma matriz CERT_EXTENSIONS de estruturas CERT_EXTENSION . Por padrão, a matriz está vazia. Um nome de assunto alternativo, se desejado, pode ser especificado como uma dessas extensões.
Valor retornado
Se a função for bem-sucedida, uma variável PCCERT_CONTEXT que aponta para o certificado criado será retornada. Se a função falhar, ela retornará NULL. Para obter informações de erro estendidas, chame GetLastError.
Comentários
Como o pEndTime deve ser uma data válida e é gerado automaticamente se não for fornecido pelo usuário, falhas inesperadas podem ser facilmente causadas quando essa API é chamada em um dia bissexto sem acompanhar a lógica do aplicativo para compensar. Para obter mais informações, consulte preparação para o ano bissexto.
Requisitos
Cliente mínimo com suporte | Windows XP [aplicativos da área de trabalho | aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | wincrypt.h |
Biblioteca | Crypt32.lib |
DLL | Crypt32.dll |