ICertAdmin::ImportCertificate 方法 (certadm.h)
ImportCertificate 方法获取以前颁发的证书,并将其导入证书颁发机构的 (CA) 数据库。 此方法首先在 ICertAdmin 接口中定义。
有关证书成功导入所必须满足的要求,请参阅备注。
语法
HRESULT ImportCertificate(
[in] const BSTR strConfig,
[in] const BSTR strCertificate,
[in] LONG Flags,
[out] LONG *pRequestId
);
参数
[in] strConfig
表示证书颁发机构的有效配置字符串,格式为 COMPUTERNAME\CANAME,其中 COMPUTERNAME 是证书服务服务器的网络名称,CANAME 是证书颁发机构的公用名称,如证书服务设置期间输入。 有关配置字符串名称的信息,请参阅 ICertConfig。
重要说明 更改配置字符串时,ImportCertificate 不会清除内部缓存。 更改 CA 的配置字符串时,必须实例化新的 ICertAdmin 对象,并使用新的配置字符串再次调用此方法。
[in] strCertificate
要导入的证书的二进制表示形式。
[in] Flags
指定证书的格式。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
BASE64 格式,带有开始/结束。 |
|
不带开始/结束的 BASE64 格式。 |
|
二进制格式。 |
[out] pRequestId
指向 LONG 值的指针,该值接收数据库为导入的证书分配的请求 ID。
返回值
C++
如果 方法成功,并且 pRequestID 参数设置为数据库为导入的证书分配的请求 ID 的值,则该方法返回S_OK。如果方法失败,它将返回一个 指示错误的 HRESULT 值。 有关常见错误代码的列表,请参阅 通用 HRESULT 值。
VB
返回值是数据库为导入的证书分配的请求 ID。注解
ImportCertificate 方法适用于已从备份部分还原的证书颁发机构:如果证书不在用于还原证书颁发机构的备份磁带上,但存在于文件中,则可以通过此方法导入证书。
若要使此方法成功,导入的证书必须以前由 strConfig 中指定的证书颁发机构颁发。 还原的证书颁发机构将验证证书的签名,如果签名无效,方法调用将失败。
此外,如果数据库中已存在证书,则无法导入该证书。 数据库中的每个证书必须是唯一的。 数据库通过检查证书的序列号来确保唯一性。
示例
// This code imports a binary certificate file.
BSTR bstrCert = NULL; // Variable for certificate.
HANDLE hFile;
DWORD cchFile, cbRead;
LONG nID; // Variable for request ID.
// Open the file that contains the certificate.
hFile = CreateFile((LPCSTR) "d:\\cert1.cer",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
0,
NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
printf("Unable to open file\n");
// Take error action as needed.
}
// Determine the file size.
cchFile = GetFileSize(hFile, NULL);
if ( (DWORD)-1 == cchFile )
{
printf("Failed GetFileSize\n");
CloseHandle(hFile);
// Take error action as needed.
}
// Allocate the memory for the certificate.
bstrCert = SysAllocStringByteLen(NULL, cchFile);
if (NULL == bstrCert)
{
printf("Failed SysAllocStringByteLen\n");
CloseHandle(hFile);
// Take error action as needed.
}
// Read in the certificate.
if (!ReadFile(hFile,
(char *)bstrCert,
cchFile,
&cbRead,
NULL) || (cbRead != cchFile))
{
printf("Failed to successfully read file\n");
CloseHandle(hFile);
SysFreeString(bstrCert);
// Take error action as needed.
}
// Close the file.
CloseHandle(hFile);
// Import the certificate.
bstrCA = SysAllocString(L"<COMPUTERNAMEHERE>\\<CANAMEHERE>");
if (FAILED(hr))
{
printf("Failed to allocate memory for bstrCA\n");
SysFreeString(bstrCert);
// Take error action as needed.
}
hr = pCertAdmin->ImportCertificate(bstrCA,
bstrCert,
CR_IN_BINARY,
&nID);
if (FAILED(hr))
printf("Failed ImportCertificate [%x]\n", hr);
else
printf("Imported certificated has Request ID: %d\n", nID);
SysFreeString(bstrCert);
SysFreeString(bstrCA);
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 无受支持的版本 |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | certadm.h (包括 Certsrv.h) |
Library | Certidl.lib |
DLL | Certadm.dll |