Microsoft提供的证书注册API和加密API使我们能够以编程方式应用证书并将其安装在本地计算机上。
在参考了Windows SDK 7.0附带的示例代码(enrollWithICertRequest3)之后,我发现可以通过带有ICertRequest3接口的Web服务申请证书。这很酷,但副作用是我们申请的证书必须安装在本地机器上才能调用createPFX方法来提取最终的证书文件(包括私钥)。
在深入了解ICertRequest3接口后,我找到了GetCertificate方法。但是我从这个方法得到的是一个证书,上面包含“---- begin cert --- --- end cert ---”,其中不包含私钥信息。
我不知道我是否在这里做得很清楚。所以我需要的是通过网络以编程方式申请证书,而无需在本地机器上安装。最后的pxf文件是关键点:(
以下是您的信息的示例代码段。
//Get full response for installation
hr = request3_interface->GetFullResponseProperty(
FR_PROP_FULLRESPONSENOPKCS7, //[in] LONG PropId (FR_PROP_*)
0, //[in] LONG PropIndex
PROPTYPE_BINARY, //[in] LONG PropType (PROPTYPE_*
CR_OUT_BASE64, //[in] LONG Flags (CR_OUT_*)
&var_fullresponse); //[out, retval] VARIANT *pvarPropertyValue
if(FAILED(hr))
goto error;
//Install the response
hr = enroll2_interface->InstallResponse2(
AllowNone, //[in] InstallResponseRestrictionFlags Restrictions
var_fullresponse.bstrVal, //[in] BSTR strResponse
XCN_CRYPT_STRING_BASE64, //[in] EnrodingType Encoding
bstr_policyserver_password, //[in] BSTR strPassword
bstr_policyserver_url, //[in] BSTR strEnrollmentPolicyServerUrl
bstr_policyserver_id, //[in] BSTR strEnrollmentPolicyServerID
PsfNone, //[in] PolicyServerUrlFlags EnrollmentPolicyServerFlags
policy_server_authtype); //[in] X509EnrollmentAuthFlags authFlags
if(FAILED(hr))
goto error;
hr = enroll2_interface->CreatePFX(pwd, PFXExportEEOnly, XCN_CRYPT_STRING_BASE64, &cert_raw);
if(FAILED(hr))
goto error;
任何建议都将不胜感激。期待您的回复。
此致,
约旦