Menegosiasikan ulang Koneksi Schannel
Untuk mengubah atribut koneksi, seperti cipher suite atau autentikasi klien, Anda dapat meminta "ulang" atau negosiasi ulang koneksi.
Jika atribut yang ingin Anda ubah dikontrol oleh kredensial, Anda harus mendapatkan kredensial baru sebelum menegosiasikan ulang koneksi. Untuk informasi selengkapnya, lihat Mendapatkan Kredensial Schannel.
Untuk meminta pengulangan dari aplikasi klien, panggil fungsi InitializeSecurityContext (Schannel). Aplikasi server memanggil fungsi AcceptSecurityContext (Schannel). Atur parameter sebagai berikut:
- Tentukan konteks keamanan yang ada dalam parameter phContext .
- (Hanya klien) Tentukan nama server yang sama (dalam parameter pszTargetName ) seperti yang ditentukan saat membuat konteks.
- Tentukan kredensial baru, menggunakan parameter phCredential , jika berlaku.
- Jika Anda ingin mengubah atribut konteks yang tidak terkait dengan kredensial, tentukan atribut ini menggunakan parameter fContextReq .
Setelah memanggil fungsi yang sesuai, aplikasi Anda harus mengirim hasilnya ke klien dan terus memproses pesan masuk menggunakan fungsi DecryptMessage (Schannel).
Fungsi DecryptMessage (Schannel) akan mengembalikan SEC_I_RENEGOTIATE ketika Schannel siap untuk dilanjutkan oleh aplikasi Anda. Saat Anda menerima kode pengembalian SEC_I_RENEGOTIATE, aplikasi Anda harus memanggil AcceptSecurityContext (Schannel) (server) atau InitializeSecurityContext (Schannel) ( klien), dan meneruskan konten SECBUFFER_EXTRA yang dikembalikan dari DecryptMessage di SECBUFFER_TOKEN. Setelah panggilan ini mengembalikan nilai, lanjutkan seolah-olah aplikasi Anda membuat koneksi baru.