시스템 저장소에서 인증서를로드하려고합니다. 나는 CryptoAPI를에서 기능 CertFindCertificateInStore
을 사용하고 있습니다 :CryptoAPI를 사용하여 유니 코드 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_PRINTABLE_STRING
대신CERT_RDN_UNICODE_STRING
에CERT_RDN_ATTR
에 대한 dwValueType을 설정해야합니까? (유니 코드를 사용하고 있습니다.)CERT_RDN_UNICODE_STRING
으로이 코드는 작동하지 않습니다.그럼에도 불구하고 공백 및 러시아 기호가 포함 된 제목 CN을 인증서에로드 할 수 없습니다. "foo"와 같은 간단한 CN 이름의 경우이 코드가 완벽하게 작동합니다.
이런 식으로 유니 코드 이름으로 인증서를로드하려면 어떻게해야합니까?