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

CRYPTOGRAPHY API: Next Generation (CNG) には、プロバイダーがサポートする暗号スイートのクエリ、追加、削除、優先順位付けを行う関数が用意されています。 これらの関数を使用して行われた変更はすぐに有効になり、アクティブなサーバーを再起動する必要はありません。

注意

また、Microsoft 管理コンソールのグループポリシーオブジェクトスナップインを使用して、 SSL 暗号スイートの順序 グループポリシー設定を構成することによって、暗号スイートの一覧を変更することもできます。

SSL Cipher Suite の順序 グループポリシー設定を構成するには

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