Memprioritaskan Schannel Cipher Suites

API Kriptografi: Generasi Berikutnya (CNG) menyediakan fungsi yang mengkueri, menambahkan, menghapus, dan memprioritaskan suite cipher yang didukung penyedia. Perubahan yang dilakukan dengan menggunakan fungsi ini segera berlaku dan tidak memerlukan menghidupkan ulang server aktif.

Catatan

Anda juga dapat memodifikasi daftar cipher suite dengan mengonfigurasi pengaturan kebijakan grup Cipher Suite Order SSL menggunakan snap-in Objek Kebijakan Grup di Microsoft Management Console.

Untuk mengonfigurasi pengaturan kebijakan grup Cipher Suite Order SSL

  1. Pada prompt perintah, masukkan gpedit.msc. Editor Objek Kebijakan Grup muncul.
  2. Perluas Konfigurasi Komputer, Templat Administratif, Jaringan, lalu klik Pengaturan Konfigurasi SSL.
  3. Di bawah Pengaturan Konfigurasi SSL, klik pengaturan Pesanan Cipher Suite SSL .
  4. Di panel Pesanan SSL Cipher Suite , gulir ke bagian bawah panel.
  5. Ikuti instruksi berlabel Cara mengubah pengaturan ini.

Anda perlu memulai ulang komputer setelah memodifikasi pengaturan ini agar perubahan diterapkan.

 

Daftar suite sandi dibatasi hingga 1023 karakter.

Untuk memprioritaskan suite sandi Schannel, lihat contoh berikut.

Mencantumkan Cipher Suites yang Didukung

Panggil fungsi BCryptEnumContextFunctions untuk mencantumkan suite sandi yang didukung penyedia dalam urutan prioritas.

Contoh berikut menunjukkan cara menggunakan fungsi BCryptEnumContextFunctions untuk mencantumkan cipher suite yang didukung.

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


Menambahkan, Menghapus, dan Memprioritaskan Cipher Suites

Panggil fungsi BCryptAddContextFunction dan BCryptRemoveContextFunction untuk menambahkan dan menghapus cipher suite dari daftar suite sandi yang didukung.

Saat menambahkan cipher suite, atur nilai parameter dwPosition dari fungsi BCryptAddContextFunction ke CRYPT_PRIORITY_TOP untuk menambahkannya ke bagian atas daftar yang diprioritaskan, atau ke CRYPT_PRIORITY_BOTTOM untuk menambahkannya ke bagian bawah daftar.

Untuk memprioritaskan daftar cipher suite, hapus semua cipher suite dari daftar, lalu tambahkan cipher suite ke daftar sesuai urutan yang Anda inginkan.

Contoh berikut menunjukkan cara menambahkan cipher suite ke bagian atas daftar yang diprioritaskan untuk Penyedia Microsoft Schannel default.

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


Contoh berikut menunjukkan cara menghapus cipher suite dari daftar yang diprioritaskan untuk Penyedia Microsoft Schannel default.

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