Schannel 暗号スイートの優先順位付け

Cryptography API: Next Generation (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>


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


暗号スイートの追加、削除、優先順位付け

BCryptAddContextFunction 関数と BCryptRemoveContextFunction 関数を呼び出して、サポートされている暗号スイートの一覧から暗号スイートを追加および削除します。

暗号スイートを追加する場合は、BCryptAddContextFunction 関数の dwPosition パラメーターの値を CRYPT_PRIORITY_TOP に設定して、優先順位付けされたリストの一番上に追加するか、CRYPT_PRIORITY_BOTTOMしてリストの下部に追加します。

暗号スイートの一覧に優先順位を付けるために、一覧からすべての暗号スイートを削除し、必要な順序で暗号スイートをリストに追加します。

次の例は、既定の Microsoft Schannel プロバイダーの優先順位付きリストの先頭に暗号スイートを追加する方法を示しています。

#include <stdio.h>
#include <windows.h>
#include <bcrypt.h>


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>


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