システム ストアから証明書を読み込もうとしています。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
を設定する必要があるのはなぜですか? (私は Unicode を使用しています。)このコードでは動作しません。CERT_RDN_PRINTABLE_STRING
CERT_RDN_UNICODE_STRING
CERT_RDN_UNICODE_STRING
それにもかかわらず、空白とロシア語の記号を含むサブジェクト CN を持つ証明書をロードできません。「foo」などの単純な CN 名の場合、このコードは完璧に機能します。
この方法でユニコード名の証明書をロードするにはどうすればよいですか?