Share via


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

가져온 인증서에 대한 데이터베이스 할당 요청 ID를 수신하는 LONG 값에 대한 포인터입니다.

반환 값

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 포함)
라이브러리 Certidl.lib
DLL Certadm.dll

추가 정보

CCertAdmin

ICertAdmin

ICertAdmin2

ICertConfig