CERT_INFO 구조체 디코딩

인증서가 제공되면 인증서 BLOB 를 디코딩하는 첫 번째 단계는 CertCreateCertificateContext를 호출하여 인코딩된 인증서(BLOB)에 대한 포인터를 전달하는 것입니다. 이 함수가 호출되면 인코딩된 인증서의 복제본을 만들고 , CERT_CONTEXT 형식의 구조를 만들고, CERT_INFO 형식의 구조를 만듭니다. 다음 그림과 같이 인증서 컨텍스트 에는 원래 인증서 BLOB, CERT_CONTEXT 형식의 C 구조 및 CERT_INFO 형식의 C 구조가 포함됩니다. CERT_CONTEXT 구조체의 멤버 중 하나는 CERT_INFO 구조를 가리키고 다른 하나는 인코딩된 인증서 BLOB을 가리킵니다.

인증서 컨텍스트

인코딩된 개체(데이터 멤버)는 항상 CryptDecodeObject 함수에 대한 입력으로 제공되며, 출력은 프로세스의 정도에 따라 인코딩된 멤버가 있을 수도 있고 없을 수도 있는 C 구조체입니다.

일부 디코딩이 필요한 다른 멤버가 있으며, 이는 Extension 멤버입니다. CERT_INFO 수준에서 인코딩되지는 않지만 일부 인코딩된 정보가 포함되어 있습니다. 이 정보를 디코딩하려면 다음 그림과 같이 계속 진행합니다.

디코딩 정보

CERT_INFO 구조에서 멤버 rgExtensionCERT_EXTENSION 구조체의 배열에 대한 포인터입니다. 각 CERT_EXTENSION 구조체에는 인코딩된 형식이며 디코딩해야 하는 Value 멤버가 있습니다. Value 멤버는 CryptDecodeObject 함수에 전달된 다음 함수의 출력은 pszObjId 멤버의 값에 따라 달라집니다. 그림에서는 pszObjId 값에 따라 두 개의 구조체(CERT_BASIC_CONSTRAINTS_INFO 형식 중 하나와 CERT_AUTHORITY_KEY_ID_INFO 형식 중 하나)가 생성됩니다.