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 mit diesen 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 der SSL Cipher Suite Order mithilfe des Gruppenrichtlinie Object-Snap-Ins in Microsoft Management Console konfigurieren.

So konfigurieren Sie die Gruppenrichtlinieneinstellung SSL Cipher Suite Order

  1. Geben Sie an einer Eingabeaufforderung gpedit.msc ein. Die Gruppenrichtlinienobjekt-Editor wird angezeigt.
  2. Erweitern Sie Computerkonfiguration, Administrative Vorlagen, Netzwerk, und klicken Sie dann auf SSL-Konfiguration Einstellungen.
  3. Klicken Sie unter SSL-Konfiguration Einstellungen auf die Einstellung SSL Cipher Suite Order .
  4. Scrollen Sie im Bereich SSL Cipher Suite Order (SSL Cipher Suite-Reihenfolge) zum unteren Rand des Bereichs.
  5. Befolgen Sie die Anweisungen mit der Bezeichnung Ändern dieser Einstellung.

Es ist erforderlich, den Computer neu zu starten, nachdem Sie diese Einstellung geändert haben, damit die Änderungen wirksam werden.

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

Informationen zum Priorisieren von Schannel-Verschlüsselungssammlungen finden Sie in den folgenden Beispielen.

Auflisten unterstützter Verschlüsselungssammlungen

Rufen Sie die BCryptEnumContextFunctions-Funktion auf, um die Verschlüsselungssammlungen aufzulisten, die ein Anbieter nach 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 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 priorisierten Liste 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 priorisierten Liste 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);
}