IBackgroundCopyJobHttpOptions::SetClientCertificateByID-Methode (bits2_5.h)
Gibt den Bezeichner des Client-Zertifikats an, das für die Client-Authentifizierung in einer HTTPS (SSL)-Anfrage verwendet werden soll.
Syntax
HRESULT SetClientCertificateByID(
[in] BG_CERT_STORE_LOCATION StoreLocation,
[in] LPCWSTR StoreName,
[in] byte *pCertHashBlob
);
Parameter
[in] StoreLocation
Gibt den Speicherort eines Systemspeichers an, der zum Suchen des Zertifikats verwendet werden soll. Mögliche Werte finden Sie in der BG_CERT_STORE_LOCATION-Enumeration .
[in] StoreName
Null-terminierte Zeichenfolge, die den Namen des Zertifikatspeichers enthält. Die Zeichenfolge ist auf 256 Zeichen beschränkt, einschließlich des NULL-Abschlusszeichens. Sie können einen der folgenden Systemspeicher oder einen anwendungsdefinierten Speicher angeben. Der Speicher kann ein lokaler Speicher oder ein Remotespeicher sein.
Wert | Bedeutung |
---|---|
|
Zertifizierungsstellenzertifikate |
|
Persönliche Zertifikate |
|
Stammzertifikate |
|
Softwareherausgeberzertifikat |
[in] pCertHashBlob
SHA1-Hash, der das Zertifikat identifiziert. Verwenden Sie einen 20-Byte-Puffer 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 | Beschreibung |
---|---|
|
Erfolg. |
|
Der Benutzer verfügt nicht über die Berechtigung für den Zugriff auf den Speicherort. |
|
Der Wert für den StoreLocation-Parameter ist in der BG_CERT_STORE_LOCATION-Enumeration nicht definiert. |
|
Es konnte kein Speicher gefunden werden, der mit dem StoreName-Parameter übereinstimmt. |
|
Ein Zertifikat, das dem Hash entspricht, wurde nicht gefunden. |
|
Der StoreName - oder pCertHashBlob-Parameter darf nicht NULL sein. |
|
Die Puffergröße pCertHashBlob beträgt nicht 20 Bytes. |
|
Der StoreName-Parameter umfasst mehr als 256 Zeichen. |
|
Der Status des Auftrags kann nicht BG_JOB_STATE_CANCELLED oder BG_JOB_STATE_ACKNOWLEDGED werden. |
Hinweise
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 für einen Auftrag ein Zertifikat erforderlich ist. Sie können auch die Zertifikate im Speicher aufzählen und dem Benutzer die Auswahl des Zertifikats überlassen. 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-Fingerabdruck werden nicht unterstützt.
Beispiele
Im folgenden Beispiel wird gezeigt, wie ein Clientzertifikat für einen Auftrag mithilfe des Fingerabdrucks des Zertifikats angegeben wird. Im Beispiel wird der Fingerabdruck des Zertifikats hart codieren 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 |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista |
Unterstützte Mindestversion (Server) | Windows Server 2008 |
Zielplattform | Windows |
Kopfzeile | bits2_5.h (Bits.h einschließen) |
Bibliothek | Bits.lib |
Weitere Informationen
IBackgroundCopyJobHttpOptions::GetClientCertificate