共用方式為


設定通道加密套件的優先順序

密碼編譯 API:新一代 (CNG) 提供可查詢、新增、移除及設定提供者所支援之加密套件優先順序的函式。 使用這些函式所做的變更會立即生效,而且不需要重新啟動作用中的伺服器。

注意

您也可以使用 Microsoft 管理控制台中的組策略物件嵌入式管理工具,設定 SSL 加密套件順序 的組策略設定,來修改加密套件清單。

設定 SSL 密碼套件排序 群組原則設定

  1. 在命令提示字元中,輸入 gpedit.msc組策略對象編輯器 隨即出現。
  2. 展開 [計算機設定][系統管理範本][網络],然後按兩下 [SSL 組態設定]
  3. 在 [SSL 組態設定]下,按一下 [SSL 加密套件順序] 設定。
  4. 在 [SSL 加密套件順序] 窗格中,捲動至窗格底部。
  5. 依照標籤 如何修改此設定的指示。

修改此設定之後,必須重新啟動計算機,變更才會生效。

 

加密套件清單限制為1023個字元。

若要設定安全通道加密套件的優先順序,請參閱下列範例。

列出支援的加密套件

呼叫 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通道提供者的優先順序清單頂端。

#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通道提供者的優先順序清單中移除加密套件。

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