我正試圖從系統商店加載證書。我使用的功能CertFindCertificateInStore
從CryptoAPI的:如何使用CryptoAPI加載unicode CN的證書?
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);
爲什麼我需要爲
CERT_RDN_ATTR
的dwValueType設置爲CERT_RDN_PRINTABLE_STRING
,而不是CERT_RDN_UNICODE_STRING
? (我正在使用Unicode。)與CERT_RDN_UNICODE_STRING
此代碼不起作用。儘管如此,我無法加載包含空白和俄羅斯符號的主題CN的證書。對於簡單的CN名稱(如「foo」),此代碼完美無缺。
我該如何使用unicode名稱加載證書?