Condividi tramite


Decodifica di una struttura CERT_INFO

Dato un certificato, il primo passaggio nella decodifica del BLOB del certificato consiste nel chiamare CertCreateCertificateContext, passandolo a un puntatore al certificato codificato (BLOB). Quando questa funzione viene chiamata, crea un duplicato del certificato codificato, crea una struttura di tipo CERT_CONTEXT e crea una struttura di tipo CERT_INFO. Come illustrato nella figura seguente, un contesto di certificato include il BLOB del certificato originale, una struttura C di tipo CERT_CONTEXT e una struttura C di tipo CERT_INFO. Uno dei membri della struttura CERT_CONTEXT punta alla struttura CERT_INFO e un altro al BLOB del certificato codificato.

contesto del certificato

L'oggetto codificato (membro dati) viene sempre fornito come input alla funzione CryptDecodeObject e l'output è una struttura C che può o non avere membri codificati, a seconda della distanza del processo.

C'è un altro membro che richiede una decodifica e che è il membro Estensione . Sebbene non sia codificato a livello di CERT_INFO , contiene alcune informazioni codificate. Per decodificare queste informazioni, procedere come illustrato nella figura seguente.

decodifica delle informazioni

Nella struttura CERT_INFO membro rgExtension è un puntatore a una matrice di strutture CERT_EXTENSION . Ogni CERT_EXTENSION struttura ha un membro Value che è in formato codificato e deve essere decodificato. Il membro Value viene passato alla funzione CryptDecodeObject e quindi l'output della funzione dipende dal valore del membro pszObjId . Si noti che nella figura vengono prodotte due strutture diverse, una di tipo CERT_BASIC_CONSTRAINTS_INFO e una di tipo CERT_AUTHORITY_KEY_ID_INFO, a seconda del valore di pszObjId.