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 プロトコルを使用するリモート ファイルにのみ適用されます。 すべてのジョブの種類に証明書を指定できます。
Web サイトが SSL クライアント証明書を受け入れるが不要で、BITS ジョブでクライアント証明書が指定されていない場合、ジョブは ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c) で失敗します。
ジョブまたはアプリケーションの証明書を作成する場合は、レジストリまたはデータベースに証明書識別子 (拇印) を格納し、ジョブで証明書が必要な場合に使用できます。 ストア内の証明書を列挙し、ユーザーが証明書を選択できるようにすることもできます。 もう 1 つの方法は、 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 を含む) |
Library | Bits.lib |
こちらもご覧ください
IBackgroundCopyJobHttpOptions::GetClientCertificate