다음을 통해 공유


Schannel Cipher Suites 우선 순위 지정

암호화 API: CNG(차세대)는 공급자가 지원하는 암호 그룹을 쿼리, 추가, 제거 및 우선 순위를 지정하는 함수를 제공합니다. 이러한 함수를 사용하여 변경한 내용은 즉시 적용되며 활성 서버를 다시 시작할 필요가 없습니다.

참고

Microsoft 관리 콘솔의 그룹 정책 개체 스냅인을 사용하여 SSL 암호 그룹 순서 그룹 정책 설정을 구성하여 암호 그룹 목록을 수정할 수도 있습니다.

SSL 암호 그룹 주문 그룹 정책 설정을 구성하려면

  1. 명령 프롬프트에서 gpedit.msc를 입력합니다. 그룹 정책 개체 편집기가 나타납니다.
  2. 컴퓨터 구성, 관리 템플릿, 네트워크를 확장한 다음 SSL 구성 설정을 클릭합니다.
  3. SSL 구성 설정에서 SSL 암호 그룹 순서 설정을 클릭합니다.
  4. SSL 암호 그룹 순서 창에서 창 아래쪽으로 스크롤합니다.
  5. 이 설정을 수정하는 방법 레이블이 지정된 지침을 따릅니다.

변경 내용을 적용하려면 이 설정을 수정한 후 컴퓨터를 다시 시작해야 합니다.

 

암호 그룹 목록은 1023자로 제한됩니다.

Schannel 암호 도구 모음의 우선 순위를 지정하려면 다음 예제를 참조하세요.

지원되는 암호 그룹 나열

BCryptEnumContextFunctions 함수를 호출하여 공급자가 지원하는 암호 그룹을 우선 순위 순서대로 나열합니다.

다음 예제에서는 BCryptEnumContextFunctions 함수를 사용하여 지원되는 암호 그룹을 나열하는 방법을 보여 줍니다.

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


암호화 도구 모음 추가, 제거 및 우선 순위 지정

BCryptAddContextFunctionBCryptRemoveContextFunction 함수를 호출하여 지원되는 암호 그룹 목록에서 암호 그룹을 추가하고 제거합니다.

암호 그룹을 추가할 때 BCryptAddContextFunction 함수의 dwPosition 매개 변수 값을 CRYPT_PRIORITY_TOP 설정하여 우선 순위가 지정된 목록의 맨 위에 추가하거나 목록 맨 아래에 추가하도록 CRYPT_PRIORITY_BOTTOM.

암호 그룹 목록의 우선 순위를 지정하려면 목록에서 모든 암호 그룹을 제거한 다음 원하는 순서대로 목록에 암호 그룹을 추가합니다.

다음 예제에서는 기본 Microsoft Schannel 공급자에 대한 우선 순위가 지정된 목록의 맨 위에 암호 그룹을 추가하는 방법을 보여줍니다.

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


다음 예제에서는 기본 Microsoft Schannel 공급자에 대한 우선 순위가 지정된 목록에서 암호 그룹을 제거하는 방법을 보여줍니다.

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