Freigeben über


IBackgroundCopyJobHttpOptions::SetClientCertificateByID-Methode (bits2_5.h)

Gibt den Bezeichner des Clientzertifikats an, das für die Clientauthentifizierung in einer HTTPS(SSL)-Anforderung verwendet werden soll.

Syntax

HRESULT SetClientCertificateByID(
  [in] BG_CERT_STORE_LOCATION StoreLocation,
  [in] LPCWSTR                StoreName,
  [in] byte                   *pCertHashBlob
);

Die Parameter

[in] StoreLocation

Gibt den Speicherort eines Systemspeichers an, der zum Nachschlagen des Zertifikats verwendet werden soll. Mögliche Werte finden Sie in der BG_CERT_STORE_LOCATION Enumeration.

[in] StoreName

Null-beendete Zeichenfolge, die den Namen des Zertifikatspeichers enthält. Die Zeichenfolge ist auf 256 Zeichen beschränkt, einschließlich des Null-Terminators. Sie können einen der folgenden Systemspeicher oder einen anwendungsdefinierten Speicher angeben. Der Speicher kann ein lokaler oder Remotespeicher sein.

Wert Bedeutung
CA
Zertifizierungsstellenzertifikate
MEIN
Persönliche Zertifikate
WURZEL
Stammzertifikate
SPC
Softwareherausgeberzertifikat

[in] pCertHashBlob

SHA1-Hash, der das Zertifikat identifiziert. Verwenden Sie einen 20 Bytepuffer für den Hash. Weitere Informationen finden Sie in den Hinweisen.

Rückgabewert

In der folgenden Tabelle sind einige der möglichen Rückgabewerte aufgeführt.

Rückgabecode Description
S_OK
Erfolg.
E_ACCESSDENIED
Der Benutzer verfügt nicht über die Berechtigung für den Zugriff auf den Speicherort.
E_NOTIMPL
Der Wert für den StoreLocation-Parameter ist in der BG_CERT_STORE_LOCATION-Enumeration nicht definiert.
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)
Es wurde kein Speicher gefunden, der mit dem StoreName-Parameter übereinstimmen.
CRYPT_E_NOT_FOUND
Ein Zertifikat, das mit dem Hash übereinstimmt, wurde nicht gefunden.
RPC_X_NULL_REF_POINTER
Der Parameter "StoreName " oder "pCertHashBlob " darf nicht NULL sein.
RPC_X_BAD_STUB_DATA
Die Größe des pCertHashBlob-Puffers beträgt nicht 20 Byte.
BG_E_STRING_TOO_LONG
Der StoreName-Parameter ist mehr als 256 Zeichen.
BG_E_INVALID_STATE
Der Status des Auftrags kann nicht BG_JOB_STATE_CANCELLED oder BG_JOB_STATE_ACKNOWLEDGED werden.

Bemerkungen

Nur der Auftragsbesitzer kann das Clientzertifikat angeben. Wenn der Auftrag den Besitz ändert, entfernt BITS das Zertifikat aus dem Auftrag.

Das Clientzertifikat gilt nur für Remotedateien, die das HTTP- oder HTTPS-Protokoll verwenden. Sie können ein Zertifikat für alle Auftragstypen angeben.

Wenn eine Website ein SSL-Clientzertifikat akzeptiert, aber kein SSL-Clientzertifikat erfordert, und der BITS-Auftrag kein Clientzertifikat angibt, schlägt der Auftrag mit ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c) fehl.

Wenn Sie ein Zertifikat für den Auftrag oder die Anwendung erstellen, können Sie den Zertifikatbezeichner (Fingerabdruck) in der Registrierung oder Datenbank speichern und verwenden, wenn ein Auftrag ein Zertifikat benötigt. Sie können auch die Zertifikate im Speicher aufzählen und dem Benutzer die Auswahl des Zertifikats ermöglichen. Eine weitere Alternative besteht darin, die CertFindCertificateInStore-Funktion aufzurufen, um den Zertifikatkontext basierend auf einigen Kriterien abzurufen. Rufen Sie mithilfe des Kontexts die CertGetCertificateContextProperty-Funktion auf, um den Hash abzurufen (geben Sie CERT_HASH_PROP_ID für dwPropId an).

SmartCard-Fingerabdrucke werden nicht unterstützt.

Examples

Das folgende Beispiel zeigt, wie Sie mithilfe des Fingerabdrucks des Zertifikats ein Clientzertifikat für einen Auftrag angeben. Im Beispiel wird der Fingerabdruck des Zertifikats hartcodieren und davon ausgegangen, dass pJob auf einen gültigen Auftrag verweist.


  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();
  }


Anforderungen

Anforderung Wert
Mindestens unterstützter Client Windows Vista
Mindestanforderungen für unterstützte Server Windows Server 2008
Zielplattform Fenster
Header bits2_5.h (bits.h einschließen)
Library Bits.lib

Siehe auch

IBackgroundCopyJobHttpOptions

IBackgroundCopyJobHttpOptions::GetClientCertificate

IBackgroundCopyJobHttpOptions::RemoveClientCertificate

IBackgroundCopyJobHttpOptions::SetClientCertificateByName