設定安全通道加密套件的優先順序
密碼編譯 API:新一代 (CNG) 提供函式來查詢、新增、移除和設定提供者支援的加密套件優先順序。 使用這些函式所做的變更會立即生效,而且不需要重新開機使用中的伺服器。
注意
您也可以使用 Microsoft Management Console 中的 群組原則 物件嵌入式管理單元來設定SSL 加密套件順序群組原則設定,以修改加密套件清單。
若要設定 SSL 加密套件順序 群組原則設定
- 在命令提示字元中,輸入 gpedit.msc。 [群組原則物件編輯器] 隨即出現。
- 展開 [電腦設定]、[ 系統管理範本]、[ 網路],然後按一下 [ SSL 組態設定]。
- 在 [SSL 組態設定] 下,按一下 [ SSL 加密套件順序] 設定。
- 在 [ SSL 加密套件順序] 窗格中,捲動至窗格底部。
- 遵循標示 為如何修改此設定的指示。
修改此設定之後,必須重新開機電腦,變更才會生效。
加密套件的清單限制為 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);
}
}
新增、移除和優先順序加密套件
呼叫 BCryptAddCoNtextFunction 和 BCryptRemoveCoNtextFunction 函式,從支援的加密套件清單中新增和移除加密套件。
新增加密套件時,請將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);
}