Поделиться через


Метод ICertAdmin::ImportCertificate (certadm.h)

Метод ImportCertificate принимает ранее выданный сертификат и импортирует его в базу данных центра сертификации (ЦС). Этот метод был впервые определен в интерфейсе 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 не очищает внутренний кэш при изменении строки конфигурации. При изменении строки конфигурации для ЦС необходимо создать экземпляр нового объекта ICertAdmin и снова вызвать этот метод с новой строкой конфигурации.
 

[in] strCertificate

Двоичное представление импортируемого сертификата.

[in] Flags

Указывает формат сертификата. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
CR_IN_BASE64HEADER
Формат BASE64 с начальным и конечным.
CR_IN_BASE64
Формат BASE64 без начала и конца.
CR_IN_BINARY
Двоичный формат.

[out] pRequestId

Указатель на значение LONG , которое получает идентификатор запроса, назначаемого базой данных, для импортированного сертификата.

Возвращаемое значение

C++

Если метод выполнен успешно, а параметру pRequestID присвоено значение идентификатора запроса, назначаемого базой данных, для импортированного сертификата, метод возвращает S_OK.

Если метод завершается сбоем, он возвращает значение HRESULT , указывающее на ошибку. Список распространенных кодов ошибок см. в разделе Общие значения HRESULT.

VB

Возвращаемое значение — это идентификатор запроса, назначаемого базой данных, для импортированного сертификата.

Комментарии

Метод 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
Header certadm.h (включая Certsrv.h)
Библиотека Certidl.lib
DLL Certadm.dll

См. также раздел

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig