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

指定证书的格式。 此参数的取值可为下列值之一:

含义
CR_IN_BASE64HEADER
BASE64 格式,带有开始/结束。
CR_IN_BASE64
不带开始/结束的 BASE64 格式。
CR_IN_BINARY
二进制格式。

[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

另请参阅

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig