Я пытаюсь загрузить сертификат из системного хранилища.Я использую функцию CertFindCertificateInStore
из CryptoAPI:
std::string certName;
CERT_RDN_ATTR subjCN;
subjCN.pszObjId = szOID_COMMON_NAME;
subjCN.dwValueType = CERT_RDN_PRINTABLE_STRING;
subjCN.Value.cbData = 2*(certName.size());
subjCN.Value.pbData = (BYTE*)certName.c_str();
CERT_RDN rdn;
rdn.cRDNAttr = 1;
rdn.rgRDNAttr = &subjCN;
cert = CertFindCertificateInStore ( certStore,
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,
CERT_UNICODE_IS_RDN_ATTRS_FLAG ,
CERT_FIND_SUBJECT_ATTR,
&rdn,
NULL);
Почему мне нужно установить dwValueType для CERT_RDN_ATTR
в CERT_RDN_PRINTABLE_STRING
вместо CERT_RDN_UNICODE_STRING
?(Я использую Unicode.) С CERT_RDN_UNICODE_STRING
этот код не работает.
Тем не менее, я не могу загрузить сертификат с темой CN, содержащей пробелы и русские символы.Для простых имен CN, таких как "foo", этот код отлично работает.
Что я могу сделать, чтобы загрузить сертификаты с именем Unicode таким образом?