Priorizando pacotes de criptografia do Schannel
API de criptografia: o CNG (Next Generation) fornece funções que consultam, adicionam, removem e priorizam os pacotes de criptografia compatíveis com um provedor. As alterações feitas usando essas funções entrarão em vigor imediatamente e não exigem a reinicialização de um servidor ativo.
Observação
Você também pode modificar a lista de pacotes de criptografia definindo as configurações de política de grupo do SSL Cipher Suite Order usando o snap-in objeto Política de Grupo no Console de Gerenciamento da Microsoft.
Para definir a configuração da política de grupo Ordem do Pacote de Criptografia SSL
- Em um prompt de comando, insira gpedit.msc. O Editor de Objetos Política de Grupo é exibido.
- Expanda Configuração do Computador, Modelos Administrativos, Rede e clique em Configurações de SSL.
- Em Configurações de SSL, clique na configuração Ordem do Pacote de Criptografia SSL .
- No painel Ordem do Pacote de Criptografia SSL , role até a parte inferior do painel.
- Siga as instruções rotuladas como Como modificar essa configuração.
É necessário reiniciar o computador depois de modificar essa configuração para que as alterações entrem em vigor.
A lista de pacotes de criptografia é limitada a 1023 caracteres.
Para priorizar os pacotes de criptografia Schannel, confira os exemplos a seguir.
- Listando pacotes de criptografia com suporte
- Adicionando, removendo e priorizando pacotes de criptografia
Listando pacotes de criptografia com suporte
Chame a função BCryptEnumContextFunctions para listar os pacotes de criptografia compatíveis com um provedor na ordem de prioridade.
O exemplo a seguir demonstra como usar a função BCryptEnumContextFunctions para listar pacotes de criptografia com suporte.
#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);
}
}
Adicionando, removendo e priorizando pacotes de criptografia
Chame as funções BCryptAddContextFunction e BCryptRemoveContextFunction para adicionar e remover pacotes de criptografia da lista de pacotes de criptografia com suporte.
Ao adicionar um conjunto de criptografias, defina o valor do parâmetro dwPosition da função BCryptAddContextFunction como CRYPT_PRIORITY_TOP para adicioná-lo à parte superior da lista priorizada ou para CRYPT_PRIORITY_BOTTOM adicioná-lo à parte inferior da lista.
Para priorizar a lista de pacotes de criptografia, remova todos os pacotes de criptografia da lista e adicione pacotes de criptografia à lista na ordem desejada.
O exemplo a seguir mostra como adicionar um conjunto de criptografias à parte superior da lista priorizada para o Provedor Schannel padrão da 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);
}
O exemplo a seguir mostra como remover um conjunto de criptografias da lista priorizada para o Provedor Schannel padrão da 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);
}