Funzione CryptVerifyCertificateSignatureEx (wincrypt.h)

La funzione CryptVerifyCertificateSignatureEx verifica la firma di un certificato soggetto, un elenco di revoche di certificati, una richiesta di certificato o una richiesta keygen usando la chiave pubblica dell'autorità emittente. La funzione non richiede l'accesso a una chiave privata.

Sintassi

BOOL CryptVerifyCertificateSignatureEx(
  [in]                HCRYPTPROV_LEGACY hCryptProv,
  [in]                DWORD             dwCertEncodingType,
  [in]                DWORD             dwSubjectType,
  [in]                void              *pvSubject,
  [in]                DWORD             dwIssuerType,
  [in]                void              *pvIssuer,
  [in]                DWORD             dwFlags,
  [in, out, optional] void              *pvExtra
);

Parametri

[in] hCryptProv

Questo parametro non viene usato e deve essere impostato su NULL.

Windows Server 2003 e Windows XP: Handle per il provider del servizio di crittografia usato per verificare la firma. Il tipo di dati di questo parametro è HCRYPTPROV.

Viene passato NULL a meno che non vi sia un motivo sicuro per il passaggio di un provider di crittografia specifico. Il passaggio di NULL determina l'acquisizione del provider RSA o DSS predefinito.

[in] dwCertEncodingType

Tipo di codifica del certificato usato per crittografare l'oggetto. L'identificatore del tipo di codifica del messaggio , contenuto nell'alto word di questo valore, viene ignorato da questa funzione.

Questo parametro può essere il tipo di codifica del certificato attualmente definito di seguito.

Valore Significato
X509_ASN_ENCODING
1 (0x1)
Specifica la codifica del certificato X.509.

[in] dwSubjectType

Tipo di oggetto. Questo parametro può essere uno dei tipi di oggetto seguenti.

Valore Significato
CRYPT_VERIFY_CERT_SIGN_SUBJECT_BLOB
1 (0x1)
pvSubject è un puntatore a una struttura CRYPT_DATA_BLOB .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CERT
2 (0x2)
pvSubject è un puntatore a una struttura CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL
3 (0x3)
pvSubject è un puntatore a una struttura CCRL_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE
4 (0x4)
pvSubject è un puntatore a una struttura OCSP_BASIC_SIGNED_RESPONSE_INFO .

Windows Server 2003 e Windows XP: Questo tipo di soggetto non è supportato.

[in] pvSubject

Puntatore a una struttura del tipo indicato da dwSubjectType che contiene la firma da verificare.

[in] dwIssuerType

Tipo di autorità di certificazione. Questo parametro può essere uno dei tipi di autorità di certificazione seguenti.

Valore Significato
CRYPT_VERIFY_CERT_SIGN_ISSUER_PUBKEY
1 (0x1)
pvIssuer è un puntatore a una struttura CERT_PUBLIC_KEY_INFO .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT
2 (0x2)
pvIssuer è un puntatore a una struttura CCERT_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_CHAIN
3 (0x3)
pvIssuer è un puntatore a una struttura CCERT_CHAIN_CONTEXT .
CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL
4 (0x4)
pvIssuer deve essere NULL.
 
Nota Se dwIssuerType è CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL e l'algoritmo di firma è un algoritmo hash, la firma deve contenere solo ottetti hash non crittografati. In questo caso di firma non crittografata è possibile specificare solo CRYPT_VERIFY_CERT_SIGN_ISSUER_NULL . Se viene specificato qualsiasi altro dwIssuerType , la verifica ha esito negativo e GetLastError restituisce E_INVALIDARG.
 

[in] pvIssuer

Puntatore a una struttura del tipo indicato dal valore di dwIssuerType. La struttura contiene l'accesso alla chiave pubblica necessaria per verificare la firma.

[in] dwFlags

Flag che modificano il comportamento della funzione. Può essere zero o un OR bit per bit dei valori seguenti.

Valore Significato
CRYPT_VERIFY_CERT_SIGN_DISABLE_MD2_MD4_FLAG
0x00000001
Se si imposta questo flag e CryptVerifyCertificateSignatureEx rileva un algoritmo MD2 o MD4, la funzione restituisce FALSE e imposta GetLastError su NTE_BAD_ALGID. La firma è ancora verificata, ma questa combinazione di errori consente al chiamante, ora sapendo che è stato usato un algoritmo MD2 o MD4, per decidere se considerare attendibile o rifiutare la firma.

Windows 8 e Windows Server 2012: Viene avviato il supporto per questo flag.

CRYPT_VERIFY_CERT_SIGN_SET_STRONG_PROPERTIES_FLAG
0x00000002
Imposta le proprietà della firma complesse, dopo la verifica riuscita, sull'oggetto a cui punta il parametro pvSubject .

La proprietà seguente viene impostata nel contesto del certificato:

  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
Nel contesto CRL vengono impostate le proprietà seguenti:
  • CERT_SIGN_HASH_CNG_ALG_PROP_ID
  • CERT_ISSUER_PUB_KEY_BIT_LENGTH_PROP_ID
Nota Questo flag è applicabile solo se CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL è specificato nel parametro dwSubjectType .
 
Windows 8 e Windows Server 2012: Viene avviato il supporto per questo flag.
CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG
0x00000004
Restituisce un puntatore a una struttura CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO nel parametro pvExtra . La struttura contiene la lunghezza, in bit, della chiave pubblica e i nomi degli algoritmi di firma e hash usati.

È necessario chiamare CryptMemFree per liberare la struttura. Se non è possibile allocare memoria per la struttura CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO , questa funzione restituisce correttamente ma imposta il parametro pvExtra su NULL.

Nota Questo flag è applicabile solo se CRYPT_VERIFY_CERT_SIGN_SUBJECT_OCSP_BASIC_SIGNED_RESPONSE è specificato nel parametro dwSubjectType .
 
Windows 8 e Windows Server 2012: Viene avviato il supporto per questo flag.

[in, out, optional] pvExtra

Puntatore a una struttura CRYPT_VERIFY_CERT_SIGN_STRONG_PROPERTIES_INFO se il parametro dwFlags è impostato su CRYPT_VERIFY_CERT_SIGN_RETURN_STRONG_PROPERTIES_FLAG.

È necessario chiamare CryptMemFree per liberare la struttura.

Valore restituito

Restituisce un valore diverso da zero se ha esito positivo o zero in caso contrario.

Per informazioni sugli errori estesi, chiamare GetLastError.

Nota Gli errori delle funzioni chiamate CryptCreateHash, CryptImportKey, CryptVerifySignature e CryptHashData possono essere propagati a questa funzione.
 
In caso di errore, questa funzione causerà la restituzione dei codici di errore seguenti da GetLastError.
Codice restituito Descrizione
ERROR_FILE_NOT_FOUND
Tipo di codifica del certificato non valido. Attualmente è supportato solo X509_ASN_ENCODING .
NTE_BAD_ALGID
L'identificatore di oggetto (OID) dell'algoritmo di firma non esegue il mapping a un algoritmo hash noto o supportato.
NTE_BAD_SIGNATURE
La firma non è valida.
 

Se la funzione ha esito negativo, GetLastError potrebbe restituire un errore di codifica astratta Notation One (ASN.1). Per informazioni su questi errori, vedere Codifica ASN.1/Decodifica dei valori restituiti.

Commenti

Il buffer soggetto può contenere un BLOB codificato o un contesto per un certificato o CRL. Nel caso di un contesto di certificato, se i parametri della chiave pubblica del certificato sono mancanti e se questi parametri possono essere ereditati dall'autorità di certificazione del certificato, ad esempio dal parametro chiave pubblica DSS, la proprietà CERT_PUBKEY_ALG_PARA_PROP_ID del contesto viene aggiornata con i parametri dell'algoritmo di chiave pubblica dell'autorità emittente per una firma valida.

Requisiti

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

Vedi anche

CryptVerifyCertificateSignature