• 在命令提示符处输入 gpedit.msc 。 此时将显示 组策略对象编辑器
  • 展开 “计算机配置”、“ 管理模板 ”、“ 网络 ”,然后单击“ SSL 配置设置 ”。
  • “SSL 配置设置” 下,单击“ SSL 密码套件顺序 ”设置。
  • “SSL 密码套件顺序 ”窗格中,滚动到窗格底部。
  • 按照标记为 “如何修改此设置 ”的说明进行操作。
  • 修改此设置后,必须重新启动计算机,更改才能生效。

    密码套件列表限制为 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);
    

    添加、删除和确定密码套件的优先级

    调用 BCryptAddContextFunctionBCryptRemoveContextFunction 函数,以从支持的密码套件列表中添加和删除密码套件。

    添加密码套件时,请将 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);