Funzione CertGetCertificateChain (wincrypt.h)

La funzione CertGetCertificateChain crea un contesto della catena di certificati a partire da un certificato finale e, se possibile, torna a un certificato radice attendibile.

Sintassi

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

Parametri

[in, optional] hChainEngine

Handle del motore della catena (spazio dei nomi e cache) da usare. Se hChainEngine è NULL, viene usato il motore della catena predefinito, HCCE_CURRENT_USER. Questo parametro può essere impostato su HCCE_LOCAL_MACHINE.

[in] pCertContext

Puntatore al CERT_CONTEXT del certificato finale, il certificato per il quale viene compilata una catena. Questo contesto di certificato sarà l'elemento zero-index nella prima catena semplice.

[in, optional] pTime

Puntatore a una variabile FILETIME che indica l'ora di convalida della catena. Si noti che l'ora non influisce sull'elenco di attendibilità, la revoca o il controllo dell'archivio radice. L'ora di sistema corrente viene utilizzata se null viene passato a questo parametro. L'attendibilità di un determinato certificato come radice attendibile è basata sullo stato corrente dell'archivio radice e non sullo stato dell'archivio radice alla volta passato da questo parametro. Per la revoca, un elenco di revoche di certificati (CRL), stesso, deve essere valido al momento corrente. Il valore di questo parametro viene usato per determinare se è stato revocato un certificato elencato in un CRL.

[in] hAdditionalStore

Handle per qualsiasi archivio aggiuntivo in cui cercare i certificati di supporto e gli elenchi di attendibilità dei certificati . Questo parametro può essere NULL se non è necessario eseguire ricerche in un archivio aggiuntivo.

[in] pChainPara

Puntatore a una struttura CERT_CHAIN_PARA che include parametri di compilazione della catena.

[in] dwFlags

Contrassegna i valori che indicano un'elaborazione speciale. Questo parametro può essere una combinazione di uno o più dei flag seguenti.

Valore Significato
CERT_CHAIN_CACHE_END_CERT
0x00000001
Quando questo flag è impostato, il certificato finale viene memorizzato nella cache, che potrebbe velocizzare il processo di compilazione della catena. Per impostazione predefinita, il certificato finale non viene memorizzato nella cache e deve essere verificato ogni volta che viene compilata una catena.
CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY
0x80000000
Il controllo della revoca accede solo agli URL memorizzati nella cache.
CERT_CHAIN_REVOCATION_CHECK_OCSP_CERT
0x04000000
Questo flag viene usato internamente durante la compilazione della catena per un certificato di firma OCSP ( Online Certificate Status Protocol ) per evitare controlli di revoca ciclici. Durante la compilazione della catena, se la risposta OCSP è firmata da un firmatario OCSP indipendente, oltre alla compilazione della catena originale, è presente una seconda catena compilata per il certificato del firmatario OCSP stesso. Questo flag viene usato durante questa seconda compilazione della catena per inibire un certificato di firma OCSP indipendente ricorsivo. Se il certificato del firmatario contiene l'estensione szOID_PKIX_OCSP_NOCHECK , il controllo delle revoche viene ignorato per il certificato del firmatario foglia. Sono consentiti sia il controllo OCSP che il controllo CRL.

Windows Server 2003 e Windows XP: Questo valore non è supportato.

CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL
0x00000004
Usa solo gli URL memorizzati nella cache nella compilazione di una catena di certificati. Internet e Intranet non vengono cercati oggetti basati su URL.

Nota Questo flag non è applicabile al controllo delle revoche. Impostare CERT_CHAIN_REVOCATION_CHECK_CACHE_ONLY per usare solo gli URL memorizzati nella cache per il controllo delle revoche.

CERT_CHAIN_DISABLE_PASS1_QUALITY_FILTERING
0x00000040
Per motivi di prestazioni, il secondo passaggio di compilazione della catena considera solo i percorsi di catena potenziali con qualità maggiore o uguale alla massima qualità determinata durante il primo passaggio. Il primo passaggio considera solo la firma valida, la catena completa e le radici attendibili per calcolare la qualità della catena. Questo flag può essere impostato per disabilitare questa ottimizzazione e prendere in considerazione tutti i percorsi potenziali della catena durante il secondo passaggio.
CERT_CHAIN_DISABLE_MY_PEER_TRUST
0x00000800
Questo flag non è supportato. I certificati nell'archivio "My" non vengono mai considerati per l'attendibilità peer.
CERT_CHAIN_ENABLE_PEER_TRUST
0x00000400
I certificati dell'entità finale nell'archivio "TrustedPeople" sono attendibili senza eseguire alcuna compilazione della catena. Questa funzione non imposta i bit del membro CERT_TRUST_IS_PARTIAL_CHAIN o CERT_TRUST_IS_UNTRUSTED_ROOTdwErrorStatus del parametro ppChainContext . Windows Server 2003 Windows XP : Questo flag non è supportato.
CERT_CHAIN_OPT_IN_WEAK_SIGNATURE
0x00010000
L'impostazione di questo flag indica che il chiamante desidera acconsentire esplicitamente a controlli di firma deboli.

Questo flag è disponibile nell'aggiornamento cumulativo per ogni sistema operativo a partire da Windows 7 e Windows Server 2008 R2.

CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS
0x00000080
L'impostazione predefinita consiste nel restituire solo il percorso della catena di qualità più elevata. L'impostazione di questo flag restituirà le catene di qualità inferiori. Questi vengono restituiti nei campi cLowerQualityChainContext e rgpLowerQualityChainContext del contesto della catena.
CERT_CHAIN_DISABLE_AUTH_ROOT_AUTO_UPDATE
0x00000100
L'impostazione di questo flag impedisce l'aggiornamento automatico delle radici di terze parti dal server Web Windows Update.
CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT
0x08000000
Quando si imposta CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT e si specifica anche un valore per il membro dwUrlRetrievalTimeout della struttura CERT_CHAIN_PARA , il valore specificato in dwUrlRetrievalTimeout rappresenta il timeout cumulativo in tutti i recupero url di revoca.

Se si imposta CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT ma non si specifica un valore dwUrlRetrievalTimeout , il timeout cumulativo massimo viene impostato, per impostazione predefinita, su 20 secondi. Ogni URL testato timeout dopo il superamento della metà del saldo cumulativo rimanente. Ovvero, il primo URL si verifica dopo 10 secondi, il secondo dopo 5 secondi, il terzo dopo 2,5 secondi e così via fino a quando un URL non riesce, 20 secondi o non sono presenti altri URL da testare.

Se non si imposta CERT_CHAIN_REVOCATION_ACCUMULATIVE_TIMEOUT, a ogni URL di revoca nella catena viene assegnato un timeout massimo uguale al valore specificato in dwUrlRetrievalTimeout. Se non si specifica un valore per il membro dwUrlRetrievalTimeout , a ogni URL di revoca viene assegnato un timeout predefinito massimo di 15 secondi. Se nessun URL ha esito positivo, il valore di timeout cumulativo massimo è di 15 secondi moltiplicato per il numero di URL nella catena.

È possibile impostare i valori predefiniti usando Criteri di gruppo.

CERT_CHAIN_TIMESTAMP_TIME
0x00000200
Quando questo flag è impostato, pTime viene usato come ora di timestamp per determinare se il certificato finale è stato valido. L'ora corrente può essere usata anche per determinare se il certificato finale rimane valido. Tutte le altre autorità di certificazione (CA) e i certificati radice nella catena vengono controllati usando l'ora corrente e non pTime.
CERT_CHAIN_DISABLE_AIA
0x00002000
L'impostazione di questo flag disattiva in modo esplicito i recupero di AIA (Authority Information Access).
 

È anche possibile impostare i flag di revoca seguenti, ma è possibile impostare un solo flag di questo gruppo alla volta.

Valore Significato
CERT_CHAIN_REVOCATION_CHECK_END_CERT
0x10000000
Il controllo della revoca viene eseguito sul certificato finale e solo sul certificato finale.
CERT_CHAIN_REVOCATION_CHECK_CHAIN
0x20000000
Il controllo della revoca viene eseguito su tutti i certificati in ogni catena.
CERT_CHAIN_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
0x40000000
Il controllo della revoca viene eseguito su tutti i certificati in tutte le catene, ad eccezione del certificato radice.

[in] pvReserved

Questo parametro è riservato e deve essere NULL.

[out] ppChainContext

Indirizzo di un puntatore al contesto della catena creato. Al termine dell'uso del contesto della catena, rilasciare la catena chiamando la funzione CertFreeCertificateChain .

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce un valore diverso da zero (TRUE).

Se la funzione non riesce, restituisce zero (FALSE). Per informazioni sugli errori estesi, chiamare GetLastError.

Commenti

Quando un'applicazione richiede una catena di certificati, la struttura restituita è sotto forma di CERT_CHAIN_CONTEXT. Questo contesto contiene una matrice di strutture CERT_SIMPLE_CHAIN in cui ogni catena semplice passa da un certificato finale a un certificato autofirmato. Il contesto della catena connette catene semplici tramite elenchi di attendibilità. Ogni catena semplice contiene la catena di certificati, informazioni di attendibilità di riepilogo sulla catena e informazioni di attendibilità su ogni elemento certificato nella catena.

Le osservazioni seguenti si applicano al controllo della firma avanzata:

  • È possibile abilitare il controllo delle firme complesse per questa funzione impostando il membro pStrongSignPara della struttura CERT_CHAIN_PARA a cui punta il parametro pChainPara .
  • Se nella catena viene trovato un certificato senza firma complessa, gli errori di CERT_TRUST_HAS_WEAK_SIGNATURE e CERT_TRUST_IS_NOT_SIGNATURE_VALID vengono impostati nel campo dwErrorStatus della struttura CERT_TRUST_STATUS . Il parametro ppChainContext punta a una struttura CERT_CHAIN_CONTEXT che, a sua volta, punta alla struttura CERT_TRUST_STATUS .
  • Se la catena è con firma avanzata, viene verificata la chiave pubblica nel certificato finale per determinare se soddisfa i requisiti minimi di lunghezza della chiave pubblica per una firma complessa. Se la condizione non viene soddisfatta, gli errori CERT_TRUST_HAS_WEAK_SIGNATURE e CERT_TRUST_IS_NOT_SIGNATURE_VALID vengono impostati nel campo dwErrorStatus della struttura CERT_TRUST_STATUS . Per disabilitare il controllo della lunghezza della chiave, impostare il valore CERT_CHAIN_STRONG_SIGN_DISABLE_END_CHECK_FLAG nel membro dwStrongSignFlags della struttura CERT_CHAIN_PARA a cui punta il parametro pChainPara .
  • Se i flag CERT_STRONG_SIGN_ENABLE_CRL_CHECK o CERT_STRONG_SIGN_ENABLE_OCSP_CHECK vengono impostati nella struttura CERT_STRONG_SIGN_SERIALIZED_INFO e viene trovata una risposta CRL o OCSP senza firma complessa, la risposta CRL o OCSP verrà considerata offline. Ovvero, gli errori di CERT_TRUST_IS_OFFLINE_REVOCATION e CERT_TRUST_REVOCATION_STATUS_UNKNOWN vengono impostati nel campo dwErrorStatus della struttura CERT_TRUST_STATUS . Inoltre, il membro dwRevocationResult della struttura CERT_REVOCATION_INFO è impostato su NTE_BAD_ALGID.

Esempio

Per un esempio che usa questa funzione, vedere Esempio di programma C: Creazione di una catena di certificati.

Requisiti

   
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione wincrypt.h
Libreria Crypt32.lib
DLL Crypt32.dll

Vedi anche

CERT_CHAIN_PARA

CertDuplicateCertificateChain

CertFreeCertificateChain

Funzioni di verifica della catena di certificati