Função CertGetCertificateChain (wincrypt.h)
A função CertGetCertificateChain cria um contexto de cadeia de certificados começando de um certificado final e voltando, se possível, para um certificado raiz confiável.
Sintaxe
BOOL CertGetCertificateChain(
[in, optional] HCERTCHAINENGINE hChainEngine,
[in] PCCERT_CONTEXT pCertContext,
[in, optional] LPFILETIME pTime,
[in] HCERTSTORE hAdditionalStore,
[in] PCERT_CHAIN_PARA pChainPara,
[in] DWORD dwFlags,
[in] LPVOID pvReserved,
[out] PCCERT_CHAIN_CONTEXT *ppChainContext
);
Parâmetros
[in, optional] hChainEngine
Um identificador do mecanismo de cadeia (namespace e cache) a ser usado. Se hChainEngine for NULL, o mecanismo de cadeia padrão, HCCE_CURRENT_USER, será usado. Esse parâmetro pode ser definido como HCCE_LOCAL_MACHINE.
[in] pCertContext
Um ponteiro para o CERT_CONTEXT do certificado final, o certificado para o qual uma cadeia está sendo criada. Esse contexto de certificado será o elemento de índice zero na primeira cadeia simples.
[in, optional] pTime
Um ponteiro para uma variável FILETIME que indica o tempo para o qual a cadeia deve ser validada. Observe que o tempo não afeta a lista de confiança, a revogação ou a verificação do repositório raiz. A hora atual do sistema será usada se NULL for passado para esse parâmetro. A confiança em um determinado certificado sendo uma raiz confiável baseia-se no estado atual do repositório raiz e não no estado do repositório raiz em um momento passado por esse parâmetro. Para revogação, uma lista de revogação de certificados (CRL), em si, deve ser válida no momento atual. O valor desse parâmetro é usado para determinar se um certificado listado em uma CRL foi revogado.
[in] hAdditionalStore
Um identificador para qualquer repositório adicional para pesquisar certificados de suporte e listas de confiança de certificado (CTLs). Esse parâmetro poderá ser NULL se nenhum repositório adicional for pesquisado.
[in] pChainPara
Um ponteiro para uma estrutura de CERT_CHAIN_PARA que inclui parâmetros de criação de cadeia.
[in] dwFlags
Valores de sinalizador que indicam processamento especial. Esse parâmetro pode ser uma combinação de um ou mais dos sinalizadores a seguir.
Valor | Significado |
---|---|
|
Quando esse sinalizador é definido, o certificado final é armazenado em cache, o que pode acelerar o processo de criação de cadeias. Por padrão, o certificado final não é armazenado em cache e precisa ser verificado sempre que uma cadeia for criada para ele. |
|
A verificação de revogação acessa apenas URLs armazenadas em cache. |
|
Esse sinalizador é usado internamente durante a criação da cadeia para um certificado de protocolo de status de certificado online Windows Server 2003 e Windows XP: Esse valor não tem suporte. |
|
Usa apenas URLs armazenadas em cache na criação de uma cadeia de certificados. A Internet e a intranet não são pesquisadas por objetos baseados em URL.
Observação Este sinalizador não é aplicável à verificação de revogação. Defina CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY para usar apenas URLs armazenadas em cache para verificação de revogação. |
|
Por motivos de desempenho, a segunda passagem da construção da cadeia considera apenas possíveis caminhos de cadeia com qualidade maior ou igual à mais alta qualidade determinada durante a primeira passagem. A primeira passagem considera apenas assinatura válida, cadeia completa e raízes confiáveis para calcular a qualidade da cadeia. Esse sinalizador pode ser definido para desabilitar essa otimização e considerar todos os possíveis caminhos de cadeia durante a segunda passagem. |
|
Não há suporte para esse sinalizador. Os certificados no repositório "Meu" nunca são considerados para confiança de pares. |
|
Os certificados de entidade final no repositório "TrustedPeople" são confiáveis sem executar nenhum edifício de cadeia. Essa função não define os bits de membro |
|
Definir esse sinalizador indica que o chamador deseja optar por verificações de assinatura fracas.
Esse sinalizador está disponível na atualização cumulativo para cada sistema operacional começando com o Windows 7 e o Windows Server 2008 R2. |
|
O padrão é retornar apenas o caminho da cadeia de qualidade mais alta. Definir esse sinalizador retornará as cadeias de qualidade inferiores. Eles são retornados nos campos cLowerQualityChainContext e rgpLowerQualityChainContext do contexto da cadeia. |
|
Definir esse sinalizador inibe a atualização automática de raízes de terceiros do Windows Update Web Server. |
|
Quando você define CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT e também especifica um valor para o dwUrlRetrievalTimeout membro da estrutura CERT_CHAIN_PARA, o valor especificado em dwUrlRetrievalTimeout representa o tempo limite cumulativo em todas as recuperações de URL de revogação.
Se você definir CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT mas não especificar um valor dwUrlRetrievalTimeout Se você não definir CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT, cada URL de revogação na cadeia recebe um tempo limite máximo igual ao valor especificado em dwUrlRetrievalTimeout. Se você não especificar um valor para o membro Você pode definir os valores padrão usando a Política de Grupo. |
|
Quando esse sinalizador é definido, pTime é usado como a hora do carimbo de data/hora para determinar se o certificado final era válido. A hora atual também pode ser usada para determinar se o certificado final permanece válido. Todos os outros autoridade de certificação (AC) e certificados raiz na cadeia são verificados usando o horário atual e não pTime. |
|
Definir esse sinalizador desativa explicitamente as recuperações do Acesso às Informações da Autoridade (AIA). |
Você também pode definir os seguintes sinalizadores de revogação, mas apenas um sinalizador desse grupo pode ser definido por vez.
[in] pvReserved
Esse parâmetro é reservado e deve ser NULL.
[out] ppChainContext
O endereço de um ponteiro para o contexto de cadeia criado. Quando terminar de usar o contexto de cadeia, libere a cadeia chamando a função CertFreeCertificateChain.
Valor de retorno
Se a função for bem-sucedida, a função retornará diferente de zero (TRUE).
Se a função falhar, ela retornará zero (false). Para obter informações de erro estendidas, chame GetLastError.
Observações
Quando um aplicativo solicita uma cadeia de certificados, a estrutura retornada está na forma de um CERT_CHAIN_CONTEXT. Esse contexto contém uma matriz de estruturas de CERT_SIMPLE_CHAIN em que cada cadeia simples passa de um certificado final para um certificado autoassinado. O contexto de cadeia conecta cadeias simples por meio de listas de confiança. Cada cadeia simples contém a cadeia de certificados, informações de confiança resumida sobre a cadeia e informações de confiança sobre cada elemento de certificado na cadeia.
As seguintes observações se aplicam à verificação de assinatura forte:
- Você pode habilitar a verificação de assinatura forte para essa função definindo o pStrongSignPara membro da estrutura de CERT_CHAIN_PARA que é apontado pelo parâmetro pChainPara.
-
Se um certificado sem uma assinatura forte for encontrado na cadeia, os erros de
CERT_TRUST_HAS_WEAK_SIGNATURE eCERT_TRUST_IS_NOT_SIGNATURE_VALID serão definidos no campodwErrorStatus da estrutura CERT_TRUST_STATUS . O parâmetro ppChainContextaponta para uma estrutura de CERT_CHAIN_CONTEXT que, por sua vez, aponta para a estruturaCERT_TRUST_STATUS . -
Se a cadeia for forte assinada, a chave pública no certificado final será verificada para determinar se ela atende aos requisitos mínimos de comprimento de chave pública para uma assinatura forte. Se a condição não for atendida, os erros
CERT_TRUST_HAS_WEAK_SIGNATURE eCERT_TRUST_IS_NOT_SIGNATURE_VALID serão definidos no campodwErrorStatus da estrutura CERT_TRUST_STATUS . Para desabilitar a verificação do comprimento da chave, defina o valor CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG no dwStrongSignFlags membro da estrutura CERT_CHAIN_PARA apontada pelo parâmetro pChainPara. -
Se os sinalizadores CERT_STRONG_SIGN_ENABLE_CRL_CHECK ou CERT_STRONG_SIGN_ENABLE_OCSP_CHECK forem definidos na estrutura CERT_STRONG_SIGN_SERIALIZED_INFO e uma resposta CRL ou OCSP for encontrada sem uma assinatura forte, a resposta CRL ou OCSP será tratada como offline. Ou seja, os erros
CERT_TRUST_IS_OFFLINE_REVOCATION eCERT_TRUST_REVOCATION_STATUS_UNKNOWN são definidos no campo dwErrorStatusda estrutura de CERT_TRUST_STATUS . Além disso, o dwRevocationResult membro da estrutura CERT_REVOCATION_INFO está definido como NTE_BAD_ALGID.
Exemplos
Para obter um exemplo que usa essa função, consulte Exemplo de Programa C: Criando uma cadeia de certificados.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows XP [aplicativos da área de trabalho | Aplicativos UWP] |
servidor com suporte mínimo | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
da Plataforma de Destino |
Windows |
cabeçalho | wincrypt.h |
biblioteca | Crypt32.lib |
de DLL |
Crypt32.dll |
Consulte também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de