다음을 통해 공유


IBackgroundCopyJobHttpOptions::SetClientCertificateByName 메서드(bits2_5.h)

HTTPS(SSL) 요청에서 클라이언트 인증에 사용할 클라이언트 인증서의 주체 이름을 지정합니다.

구문

HRESULT SetClientCertificateByName(
  [in] BG_CERT_STORE_LOCATION StoreLocation,
  [in] LPCWSTR                StoreName,
  [in] LPCWSTR                SubjectName
);

매개 변수

[in] StoreLocation

인증서를 찾는 데 사용할 시스템 저장소의 위치를 식별 합니다. 가능한 값은 BG_CERT_STORE_LOCATION 열거형을 참조하세요.

[in] StoreName

인증서 저장소의 이름을 포함하는 Null로 끝나는 문자열입니다. 문자열은 null 종결자를 포함하여 256자로 제한됩니다. 다음 시스템 저장소 또는 애플리케이션 정의 저장소 중 하나를 지정할 수 있습니다. 저장소는 로컬 또는 원격 저장소일 수 있습니다.

의미
Ca
인증 기관 인증서
MY
개인 인증서
루트
루트 인증서
Spc
소프트웨어 게시자 인증서

[in] SubjectName

인증서의 단순 주체 이름을 포함하는 Null로 끝나는 문자열입니다. 주체 이름에 여러 RDN(상대 고유 이름)이 포함된 경우 하나 이상의 인접 RDN을 지정할 수 있습니다. 둘 이상의 RDN을 지정하면 목록이 쉼표로 구분됩니다. 문자열은 null 종결자를 포함하여 256자로 제한됩니다. 빈 주체 이름은 지정할 수 없습니다.

이름에 개체 식별자를 포함하지 마세요. 인증서가 표시하는 것과 반대 순서로 RDN을 지정해야 합니다. 예를 들어 인증서의 주체 이름이 "CN=name1, OU=name2, O=name3"인 경우 주체 이름을 "name3, name2, name1"로 지정합니다.

반환 값

다음 표에서는 가능한 반환 값 중 일부를 나열합니다.

반환 코드 설명
S_OK
성공.
E_ACCESSDENIED
사용자에게 저장소 위치에 액세스할 수 있는 권한이 없습니다.
E_NOTIMPL
StoreLocation 값은 BG_CERT_STORE_LOCATION 열거형에 정의되어 있지 않습니다.
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
StoreName 매개 변수 값과 일치하는 저장소를 찾을 수 없습니다.
CRYPT_E_NOT_FOUND
주체 이름과 일치하는 인증서를 찾을 수 없습니다.
RPC_X_NULL_REF_POINTER
StoreName 또는 SubjectName 매개 변수는 NULL일 수 없습니다.
BG_E_STRING_TOO_LONG
StoreName 또는 SubjectName 매개 변수는 256자를 초과합니다.
BG_E_INVALID_STATE
작업의 상태는 BG_JOB_STATE_CANCELLED 또는 BG_JOB_STATE_ACKNOWLEDGED 수 없습니다.

설명

작업 소유자만 클라이언트 인증서를 지정할 수 있습니다. 작업이 소유권을 변경하면 BITS는 작업에서 인증서를 제거합니다.

클라이언트 인증서는 HTTP 또는 HTTPS 프로토콜을 사용하는 원격 파일에만 적용됩니다. 모든 작업 유형에 대한 인증서를 지정할 수 있습니다.

웹 사이트에서 SSL 클라이언트 인증서를 수락하지만 필요하지 않고 BITS 작업이 클라이언트 인증서를 지정하지 않으면 ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED(0x80072f0c)으로 작업이 실패합니다.

메서드는 주체 이름 문자열을 사용하여 인증서에 대한 부분 문자열 검색을 수행합니다. 주체 이름이 반드시 고유하지는 않으므로 이 메서드는 저장소에서 지정된 주체 이름을 사용하고 클라이언트 인증 인증서인 첫 번째 인증서를 검색합니다. 단일 일치 항목을 더 잘 찾을 수 있도록 전체 주체 이름을 제공해야 합니다. 인증서가 올바르지 않으면(신뢰할 수 없음) BITS가 파일을 전송하려고 할 때 작업이 BG_E_HTTP_ERROR_403 실패하고 작업이 오류 상태로 이동합니다. 고유한 주체 이름을 보장할 수 없는 경우 대신 IBackgroundCopyJobHttpOptions::SetClientCertificateByID 메서드를 사용하는 것이 좋습니다.

SmartCard 인증서 식별자(지문)는 지원되지 않습니다.

예제

다음 예제에서는 인증서의 주체 이름을 사용하여 작업에 대한 클라이언트 인증서를 지정하는 방법을 보여줍니다. 이 예제에서는 pJob이 유효한 작업을 가리킨다고 가정합니다.


  HRESULT hr = S_OK;
  IBackgroundCopyJob* pJob = NULL;
  IBackgroundCopyJobHttpOptions* pHttpOptions = NULL;

  // Change list of names to actual list of names.
  LPWSTR pSubjectName = L"name3, name2, name1";  
                                                    
  hr = pJob->QueryInterface(__uuidof(IBackgroundCopyJobHttpOptions), (void**)&pHttpOptions);
  pJob->Release();
  if (FAILED(hr))
  {
    wprintf(L"pJob->QueryInterface failed with 0x%x.\n", hr);
    goto cleanup;
  }

  // Use the client certificate in the current user's personal (MY) store.
  hr = pHttpOptions->SetClientCertificateByName(BG_CERT_STORE_LOCATION_CURRENT_USER, 
                                      L"MY", pSubjectName));
  if (FAILED(hr))
  {
    wprintf(L"pHttpOptions->SetClientCertificateByName 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

IBackgroundCopyJobHttpOptions::GetClientCertificate

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByID