Hiérarchisation des suites de chiffrement Schannel
API de chiffrement : nouvelle génération (CNG) fournit des fonctions qui interrogent, ajoutent, suppriment et hiérarchisent les suites de chiffrement prises en charge par un fournisseur. Les modifications apportées à l’aide de ces fonctions prennent effet immédiatement et ne nécessitent pas de redémarrage d’un serveur actif.
Notes
Vous pouvez également modifier la liste des suites de chiffrement en configurant les paramètres de stratégie de groupe Ordre de la suite de chiffrement SSL à l’aide du composant logiciel enfichable Objet stratégie de groupe dans Microsoft Management Console.
Pour configurer le paramètre de stratégie de groupe Ordre de la suite de chiffrement SSL
- À l’invite de commandes, entrez gpedit.msc. L’éditeur d’objet stratégie de groupe s’affiche.
- Développez Configuration ordinateur, Modèles d’administration, Réseau, puis cliquez sur Paramètres de configuration SSL.
- Sous Paramètres de configuration SSL, cliquez sur le paramètre Ordre de la suite de chiffrement SSL .
- Dans le volet Ordre de la suite de chiffrement SSL , faites défiler jusqu’au bas du volet.
- Suivez les instructions intitulées Comment modifier ce paramètre.
Il est nécessaire de redémarrer l’ordinateur après avoir modifié ce paramètre pour que les modifications prennent effet.
La liste des suites de chiffrement est limitée à 1 023 caractères.
Pour hiérarchiser les suites de chiffrement Schannel, consultez les exemples suivants.
- Liste des suites de chiffrement prises en charge
- Ajout, suppression et hiérarchisation des suites de chiffrement
Liste des suites de chiffrement prises en charge
Appelez la fonction BCryptEnumContextFunctions pour répertorier les suites de chiffrement prises en charge par un fournisseur par ordre de priorité.
L’exemple suivant montre comment utiliser la fonction BCryptEnumContextFunctions pour répertorier les suites de chiffrement prises en charge.
#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);
}
}
Ajout, suppression et hiérarchisation des suites de chiffrement
Appelez les fonctions BCryptAddContextFunction et BCryptRemoveContextFunction pour ajouter et supprimer des suites de chiffrement de la liste des suites de chiffrement prises en charge.
Lors de l’ajout d’une suite de chiffrement, définissez la valeur du paramètre dwPosition de la fonction BCryptAddContextFunction sur CRYPT_PRIORITY_TOP pour l’ajouter en haut de la liste hiérarchisée ou pour CRYPT_PRIORITY_BOTTOM l’ajouter au bas de la liste.
Pour hiérarchiser la liste des suites de chiffrement, supprimez toutes les suites de chiffrement de la liste, puis ajoutez des suites de chiffrement à la liste dans l’ordre souhaité.
L’exemple suivant montre comment ajouter une suite de chiffrement en haut de la liste prioritaire pour le fournisseur Microsoft Schannel par défaut.
#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);
}
L’exemple suivant montre comment supprimer une suite de chiffrement de la liste prioritaire pour le fournisseur Microsoft Schannel par défaut.
#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);
}