Получив блок PKCS # 7, вы можете получить конечный сертификат с помощью интерфейса openssl C ++, распаковав список сертификатов в цепочке и получив доступ к первому сертификату в индексе 0 (он также может иметь эквивалент в командной строке)
В следующем коде Pkcs7
определен как указатель на структуру PKCS7.
BIO *out = BIO_new(BIO_s_file());
int i = OBJ_obj2nid(Pkcs7->type);
if(i == NID_pkcs7_signed) {
certs = Pkcs7 ->d.sign->cert;
} else if(i == NID_pkcs7_signedAndEnveloped) {
certs = Pkcs7->d.signed_and_enveloped->cert;
}
os_log_info(g_logger, "number of ceritifcates = %d", sk_X509_num(certs));
X509 *rootCertX509 = sk_X509_value(certs,sk_X509_num(certs)-1);
X509 *leafCertX509 = sk_X509_value(certs,0);