Priorisieren von Schannel-Verschlüsselungssammlungen

Kryptografie-API: Next Generation (CNG) stellt Funktionen bereit, die die von einem Anbieter unterstützten Verschlüsselungssammlungen abfragen, hinzufügen, entfernen und priorisieren. Änderungen, die mithilfe dieser Funktionen vorgenommen werden, werden sofort wirksam und erfordern keinen Neustart eines aktiven Servers.

Hinweis

Sie können die Liste der Verschlüsselungssammlungen auch ändern, indem Sie die Gruppenrichtlinieneinstellungen für die SSL-Verschlüsselungssammlungsreihenfolge mithilfe des Snap-Ins Gruppenrichtlinie Object in der Microsoft Management Console konfigurieren.

So konfigurieren Sie die Gruppenrichtlinieneinstellung SSL Cipher Suite Order

  1. Geben Sie an einer Eingabeaufforderung gpedit.msc ein. Der Gruppenrichtlinie-Objekt-Editor wird angezeigt.
  2. Erweitern Sie Computerkonfiguration, Administrative Vorlagen, Netzwerk, und klicken Sie dann auf SSL-Konfigurationseinstellungen.
  3. Klicken Sie unter SSL-Konfigurationseinstellungen auf die Einstellung SSL-Verschlüsselungssammlungsreihenfolge .
  4. Scrollen Sie im Bereich SSL Cipher Suite Order (Ssl Cipher Suite Order ) nach unten im Bereich.
  5. Befolgen Sie die Anweisungen mit der Bezeichnung So ändern Sie diese Einstellung.

Nach dem Ändern dieser Einstellung muss der Computer neu gestartet werden, damit die Änderungen wirksam werden.

 

Die Liste der Verschlüsselungssammlungen ist auf 1023 Zeichen beschränkt.

Informationen zur Priorisierung von Schannel-Verschlüsselungssammlungen finden Sie in den folgenden Beispielen.

Auflisten unterstützter Verschlüsselungssammlungen

Rufen Sie die Funktion BCryptEnumContextFunctions auf, um die Verschlüsselungssammlungen aufzulisten, die ein Anbieter in der Reihenfolge der Priorität unterstützt.

Im folgenden Beispiel wird veranschaulicht, wie die BCryptEnumContextFunctions-Funktion verwendet wird, um unterstützte Verschlüsselungssammlungen aufzulisten.

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


Hinzufügen, Entfernen und Priorisieren von Verschlüsselungssammlungen

Rufen Sie die Funktionen BCryptAddContextFunction und BCryptRemoveContextFunction auf, um Verschlüsselungssammlungen aus der Liste der unterstützten Verschlüsselungssammlungen hinzuzufügen und daraus zu entfernen.

Legen Sie beim Hinzufügen einer Verschlüsselungssammlung den Wert des dwPosition-Parameters der BCryptAddContextFunction-Funktion auf CRYPT_PRIORITY_TOP fest, um ihn am Anfang der priorisierten Liste hinzuzufügen, oder auf CRYPT_PRIORITY_BOTTOM , um ihn am Ende der Liste hinzuzufügen.

Um die Liste der Verschlüsselungssammlungen zu priorisieren, entfernen Sie alle Verschlüsselungssammlungen aus der Liste, und fügen Sie der Liste dann Verschlüsselungssammlungen in der gewünschten Reihenfolge hinzu.

Das folgende Beispiel zeigt, wie Sie eine Verschlüsselungssammlung am Anfang der Priorisierungsliste für den Microsoft Schannel-Standardanbieter hinzufügen.

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


Das folgende Beispiel zeigt, wie Sie eine Verschlüsselungssammlung aus der Priorisierungsliste für den Microsoft Schannel-Standardanbieter entfernen.

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