IBackgroundCopyJobHttpOptions::SetClientCertificateByID 메서드(bits2_5.h)
HTTPS(SSL) 요청에서 클라이언트 인증에 사용할 클라이언트 인증서의 식별자를 지정합니다.
구문
HRESULT SetClientCertificateByID(
[in] BG_CERT_STORE_LOCATION StoreLocation,
[in] LPCWSTR StoreName,
[in] byte *pCertHashBlob
);
매개 변수
[in] StoreLocation
인증서를 찾는 데 사용할 시스템 저장소의 위치를 식별 합니다. 가능한 값은 BG_CERT_STORE_LOCATION 열거형을 참조하세요.
[in] StoreName
인증서 저장소의 이름을 포함하는 Null로 종료된 문자열입니다. 문자열은 null 종결자를 포함하여 256자로 제한됩니다. 다음 시스템 저장소 또는 애플리케이션 정의 저장소 중 하나를 지정할 수 있습니다. 저장소는 로컬 또는 원격 저장소일 수 있습니다.
값 | 의미 |
---|---|
|
인증 기관 인증서 |
|
개인 인증서 |
|
루트 인증서 |
|
소프트웨어 게시자 인증서 |
[in] pCertHashBlob
인증서를 식별하는 SHA1 해시입니다. 해시에 20바이트 버퍼를 사용합니다. 자세한 내용은 설명 부분을 참조하세요.
반환 값
다음 표에서는 가능한 반환 값 중 일부를 나열합니다.
반환 코드 | 설명 |
---|---|
|
성공. |
|
사용자에게 저장소 위치에 액세스할 수 있는 권한이 없습니다. |
|
StoreLocation 매개 변수의 값은 BG_CERT_STORE_LOCATION 열거형에 정의되어 있지 않습니다. |
|
StoreName 매개 변수와 일치하는 저장소를 찾을 수 없습니다. |
|
해시와 일치하는 인증서를 찾을 수 없습니다. |
|
StoreName 또는 pCertHashBlob 매개 변수는 NULL일 수 없습니다. |
|
pCertHashBlob 버퍼 크기는 20바이트가 아닙니다. |
|
StoreName 매개 변수는 256자를 초과합니다. |
|
작업의 상태는 BG_JOB_STATE_CANCELLED 또는 BG_JOB_STATE_ACKNOWLEDGED 수 없습니다. |
설명
작업 소유자만 클라이언트 인증서를 지정할 수 있습니다. 작업이 소유권을 변경하면 BITS는 작업에서 인증서를 제거합니다.
클라이언트 인증서는 HTTP 또는 HTTPS 프로토콜을 사용하는 원격 파일에만 적용됩니다. 모든 작업 유형에 대한 인증서를 지정할 수 있습니다.
웹 사이트에서 SSL 클라이언트 인증서를 수락하지만 필요하지 않고 BITS 작업이 클라이언트 인증서를 지정하지 않으면 작업이 ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED(0x80072f0c)으로 실패합니다.
작업 또는 애플리케이션에 대한 인증서를 만드는 경우 레지스트리 또는 데이터베이스에 인증서 식별자(지문)를 저장하고 작업에 인증서가 필요할 때 사용할 수 있습니다. 저장소에서 인증서를 열거하고 사용자가 인증서를 선택하도록 할 수도 있습니다. 또 다른 대안은 CertFindCertificateInStore 함수를 호출하여 일부 조건에 따라 인증서 컨텍스트를 검색하는 것입니다. 컨텍스트를 사용하여 CertGetCertificateContextProperty 함수를 호출하여 해시를 검색합니다( dwPropId에 CERT_HASH_PROP_ID 지정).
SmartCard 지문은 지원되지 않습니다.
예제
다음 예제에서는 인증서의 지문을 사용하여 작업에 대한 클라이언트 인증서를 지정하는 방법을 보여 있습니다. 이 예제에서는 인증서의 지문을 하드 코딩하고 pJob이 유효한 작업을 가리킨다고 가정합니다.
HRESULT hr = S_OK;
IBackgroundCopyJob* pJob = NULL;
IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;
BYTE Thumbprint[] = {0xa1, 0x06, 0x6e, 0x13, 0xf2, 0x34, 0x49, 0x0a, 0x22, 0xd7, 0x6f, 0xb2, 0x80, 0xab, 0x68, 0x7d, 0x16, 0x55, 0xb3, 0x14};
// Retrieve a pointer to the IBackgroundCopyJob4 interface.
hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
pJob->Release();
if (FAILED(hr))
{
wprintf(L"QueryInterface for HttpOptions failed with 0x%x.\n", hr);
goto cleanup;
}
// Use the client certificate in the current user's personal (MY) store.
hr = pHttpOptions->SetClientCertificateByID(BG_CERT_STORE_LOCATION_CURRENT_USER,
L"MY", Thumbprint);
if (FAILED(hr))
{
wprintf(L"pHttpOptions->SetClientCertificateByID failed with 0x%x.\n", hr);
goto cleanup;
}
cleanup:
if (pHttpOptions)
{
hr = pHttpOptions->Release();
}
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista |
지원되는 최소 서버 | Windows Server 2008 |
대상 플랫폼 | Windows |
헤더 | bits2_5.h(Bits.h 포함) |
라이브러리 | Bits.lib |
추가 정보
IBackgroundCopyJobHttpOptions::GetClientCertificate