Określanie priorytetów zestawów szyfrowania Schannel
API kryptografii: następnej generacji (CNG) udostępnia funkcje, które zapytują, dodają, usuwają i priorytetują zestawy szyfrowania obsługiwane przez dostawcę. Zmiany wprowadzone za pomocą tych funkcji są wprowadzane natychmiast i nie wymagają ponownego uruchomienia aktywnego serwera.
Notatka
Możesz również zmodyfikować listę zestawów szyfrowania, konfigurując ustawienia zasad grupy zestawu szyfrowania SSL za pomocą przystawki Obiekt zasad grupy w konsoli zarządzania firmy Microsoft.
Aby skonfigurować kolejność pakietów szyfrowania SSL, użyj ustawienia zasady grupy
- W wierszu polecenia wprowadź gpedit.msc. Zostanie wyświetlony edytor obiektów zasad grupy .
- Rozwiń węzeł Konfiguracja komputera, Szablony administracyjne, Sieć, a następnie kliknij Ustawienia konfiguracji protokołu SSL.
- W obszarze Ustawienia konfiguracji protokołu SSLkliknij ustawienie SSL Cipher Suite Order.
- W panelu kolejności szyfrów SSL przewiń na dół panelu.
- Postępuj zgodnie z instrukcjami oznaczonymi Jak zmodyfikować to ustawienie.
Po zmodyfikowaniu tego ustawienia należy ponownie uruchomić komputer, aby zmiany zaczęły obowiązywać.
Lista zestawów szyfrowania jest ograniczona do 1023 znaków.
Aby określić priorytety zestawów szyfrowania Schannel, zobacz następujące przykłady.
- Lista obsługiwanych zestawów szyfrowania
- dodawanie, usuwanie i określanie priorytetów zestawów szyfrowania
Wyświetlanie listy obsługiwanych zestawów szyfrowania
Wywołaj funkcję BCryptEnumContextFunctions, aby wyświetlić listę zestawów szyfrowania obsługiwane przez dostawcę w kolejności priorytetu.
W poniższym przykładzie pokazano, jak używać funkcji BCryptEnumContextFunctions, aby wyświetlić listę obsługiwanych zestawów szyfrowania.
#include <stdio.h>
#include <windows.h>
#include <bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")
void main()
{
HRESULT Status = ERROR_SUCCESS;
DWORD cbBuffer = 0;
PCRYPT_CONTEXT_FUNCTIONS pBuffer = NULL;
Status = BCryptEnumContextFunctions(
CRYPT_LOCAL,
L"SSL",
NCRYPT_SCHANNEL_INTERFACE,
&cbBuffer,
&pBuffer);
if(FAILED(Status))
{
printf_s("\n**** Error 0x%x returned by BCryptEnumContextFunctions\n", Status);
goto Cleanup;
}
if(pBuffer == NULL)
{
printf_s("\n**** Error pBuffer returned from BCryptEnumContextFunctions is null");
goto Cleanup;
}
printf_s("\n\n Listing Cipher Suites ");
for(UINT index = 0; index < pBuffer->cFunctions; ++index)
{
printf_s("\n%S", pBuffer->rgpszFunctions[index]);
}
Cleanup:
if (pBuffer != NULL)
{
BCryptFreeBuffer(pBuffer);
}
}
Dodawanie, usuwanie i określanie priorytetów zestawów szyfrowania
Wywołaj funkcje BCryptAddContextFunction i BCryptRemoveContextFunction, aby dodać i usunąć zestawy szyfrowania z listy obsługiwanych zestawów szyfrowania.
Podczas dodawania zestawu szyfrowania ustaw wartość parametru dwPosition funkcji BCryptAddContextFunction na CRYPT_PRIORITY_TOP, aby dodać ją na początku listy priorytetowej, lub na CRYPT_PRIORITY_BOTTOM, aby dodać ją na dole listy.
Aby określić priorytety listy zestawów szyfrowania, usuń wszystkie zestawy szyfrowania z listy, a następnie dodaj zestawy szyfrowania do listy w kolejności, w której chcesz.
W poniższym przykładzie pokazano, jak dodać zestaw szyfrowania na początku listy priorytetowej domyślnego dostawcy Schannel firmy Microsoft.
#include <stdio.h>
#include <windows.h>
#include <bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")
void main()
{
SECURITY_STATUS Status = ERROR_SUCCESS;
LPWSTR wszCipher = (L"RSA_EXPORT1024_DES_CBC_SHA");
Status = BCryptAddContextFunction(
CRYPT_LOCAL,
L"SSL",
NCRYPT_SCHANNEL_INTERFACE,
wszCipher,
CRYPT_PRIORITY_TOP);
}
W poniższym przykładzie pokazano, jak usunąć pakiet szyfrowania z listy priorytetowej domyślnego dostawcy Schannel firmy Microsoft.
#include <stdio.h>
#include <windows.h>
#include <bcrypt.h>
#pragma comment(lib, "Bcrypt.lib")
void main()
{
SECURITY_STATUS Status = ERROR_SUCCESS;
LPWSTR wszCipher = (L"TLS_RSA_WITH_RC4_128_SHA");
Status = BCryptRemoveContextFunction(
CRYPT_LOCAL,
L"SSL",
NCRYPT_SCHANNEL_INTERFACE,
wszCipher);
}