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

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

注意

您也可以使用 Microsoft Management Console 中的 群組原則 物件嵌入式管理單元來設定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>


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>


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>


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