Condividi tramite


Priorità delle suite di crittografia Schannel

API di crittografia: Next Generation (CNG) fornisce funzioni che eseguono query, aggiungere, rimuovere e assegnare priorità alle suite di crittografia supportate da un provider. Le modifiche apportate usando queste funzioni hanno effetto immediatamente e non richiedono il riavvio di un server attivo.

Nota

È anche possibile modificare l'elenco di pacchetti di crittografia configurando le impostazioni dei criteri di gruppo ordine di crittografia SSL con lo snap-in oggetto Criteri di gruppo in Microsoft Management Console.

Per configurare l'impostazione dei criteri di gruppo ssl Cipher Suite Order

  1. Al prompt dei comandi immettere gpedit.msc. Viene visualizzato l'editor di oggetti Criteri di gruppo.
  2. Espandere Configurazione computer, modelli amministrativi, rete e quindi fare clic su Impostazioni di configurazione SSL.
  3. In Impostazioni di configurazione SSL fare clic sull'impostazione Ordine della suite di crittografia SSL .
  4. Nel riquadro Ordine di crittografia SSL scorrere fino alla parte inferiore del riquadro.
  5. Seguire le istruzioni etichettate Come modificare questa impostazione.

È necessario riavviare il computer dopo aver modificato questa impostazione per l'effetto delle modifiche.

 

L'elenco di suite di crittografia è limitato a 1023 caratteri.

Per assegnare priorità alle suite di crittografia Schannel, vedere gli esempi seguenti.

Elenco di pacchetti di crittografia supportati

Chiamare la funzione BCryptEnumContextFunctions per elencare le suite di crittografia supportate da un provider in ordine di priorità.

Nell'esempio seguente viene illustrato come usare la funzione BCryptEnumContextFunctions per elencare i pacchetti di crittografia supportati.

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


Aggiunta, rimozione e priorità di pacchetti di crittografia

Chiamare le funzioni BCryptAddContextFunction e BCryptRemoveContextFunction per aggiungere e rimuovere suite di crittografia dall'elenco di suite di crittografia supportate.

Quando si aggiunge una suite di crittografia, impostare il valore del parametro dwPosition della funzione BCryptAddContextFunction su CRYPT_PRIORITY_TOP per aggiungerlo all'inizio dell'elenco con priorità o CRYPT_PRIORITY_BOTTOM per aggiungerlo alla fine dell'elenco.

Per assegnare priorità all'elenco di suite di crittografia, rimuovere tutte le suite di crittografia dall'elenco e quindi aggiungere pacchetti di crittografia all'elenco nell'ordine desiderato.

Nell'esempio seguente viene illustrato come aggiungere una suite di crittografia all'inizio dell'elenco con priorità per il provider microsoft Schannel predefinito.

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


Nell'esempio seguente viene illustrato come rimuovere una suite di crittografia dall'elenco con priorità per il provider microsoft Schannel predefinito.

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