Schannel adalah implementasi protokol TLS bawaan Windows. Ini memungkinkan mendukung koneksi yang aman tanpa perpustakaan eksternal.
Repo berisi:
SChannel.Utils.pas - unit dengan fungsi helper transport -agnostik untuk mudah implementasi komunikasi TLS melalui windows schannel.
SChannel.SyncHandshake.pas - Sampel jabat tangan TLS sinkron transportasi menggunakan fungsi panggilan balik untuk komunikasi nyata
SChannel.Jwa*.pas - Deklarasi API dipinjam dari proyek Jedi
SChannel.IcsWSocket.pas - ICS Twsocket Keturunan yang melakukan komunikasi TLS
Proyek Demo - Demo untuk melakukan permintaan tekstual (terutama https) melalui koneksi aman
Enable TLS 1.1 and 1.2 for W7.reg - Registry Patch yang memungkinkan TLS 1.1 dan 1.2 pada Windows 7 (ini adalah versi protokol aktual yang tidak diaktifkan secara default pada W7)
Tidak ada komponen yang dapat diinstal - Anda bisa mengunduh sumber, menambahkan jalur dan menggunakan unit. Tetapi jika Anda lebih suka paket, ada dua dari mereka yang dibuat dengan RAD XE2. Cukup buka salah satu dari mereka di IDE dan itu harus meningkatkan paket ke versi saat ini.
SChannel_XE2.dproj berisi semua unit kecuali soket ICS. Gunakan jika Anda tidak menginstal ICSSChannel_XE2_ICS.dproj berisi semua unit termasuk soket ICS di SChannel.IcsWSocket.pas . Membutuhkan ICS terpasang Kedua paket dikonfigurasi untuk membangun unit ke ..Bin$(Config)$(Platform) untuk mengurangi kekacauan dan menghindari unit Schannel yang mengkompilasi ulang setiap kali proyek dibangun. Jadi, Anda dapat menambahkan SChannelBinRelease$(Platform) ke jalur pencarian Anda dan SChannelSource ke jalur penelusuran. Dalam hal ini jangan lupa untuk membangun paket untuk semua platform yang Anda gunakan. Setelah instalasi itu selesai.
Instalasi melalui Delphinus Package Manager juga dimungkinkan. Namun, ini adalah versi awal yang memiliki beberapa keterbatasan:
Proyek ini dimulai karena saya membutuhkan TLS di aplikasi Delphi saya dan tidak suka pengiriman dua OpenSSL LIBS. Versi awal adalah 1: 1 Menulis ulang sampel Schannel yang ditemukan di internet. Saat ini digunakan dalam proyek 24*7 saya tetapi saya hanya menerapkan fungsi -fungsi yang saya butuhkan. Saya tidak terbiasa dengan semua cryptostuff ini jadi jangan berharap validasi sertifikat lanjutan, server aman dan sebagainya. Tetapi jika Anda ingin menambahkan sesuatu yang hilang, saya akan menganggap PR Anda dengan senang :).
Ada bug Schannel yang menyebabkan fungsi jarang dan secara acak mengembalikan status SEC_E_BUFFER_TOO_SMALL atau SEC_E_MESSAGE_ALTERED selama jabat tangan. Deskripsi yang baik tentang masalah ini dapat ditemukan di sini (secara singkat: itu hanya terjadi pada Windows 7 dan 8, dengan TLSV1.2 dan TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 dan TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 dengan). Untuk menangani masalah ini, beberapa langkah diambil:
Peningkatan jumlah buffer untuk jabat tangan (apa yang dilakukan tim keriting) - tidak membantu
Menambahkan fungsi IsWinHandshakeBug ke SChannel.Utils.pas yang memungkinkan untuk dengan mudah memeriksa bug di except bagian dari panggilan DoClientHandshake . Hanya seorang penolong untuk membuat pemrosesan khusus seperti
...
try
DoClientHandshake(FSessionData, FHandShakeData);
except on E: ESSPIError do
// Hide Windows handshake bug and restart the process
if (FHandShakeData.Stage = hssReadSrvHello) and IsWinHandshakeBug(E.SecStatus) then
begin
Log(Format( ' Handshake bug: "%s", retrying ' , [E.Message]));
DeleteContext(FHandShakeData.hContext);
DoHandshakeStart;
Exit;
end
else
raise E;
end ;
... TSChannelWSocket Class dari IcsSChannelSocket.pas dan fungsi PerformClientHandshake dari SChannel.SyncHandshake.pas sudah menerapkan sekali lagi mencoba lagi secara tak terlihat kepada penelepon.
Kelas soket turun dari ICS TWSocket yang melakukan banyak hal untuk Anda. Fitur Utama:
Secure ; Acara OnTLSDone dan OnTLSShutdown akan memberi sinyal saluran saluranSessionData.SharedCreds . Saat sesi dibagikan, jabat tangan menjadi jauh lebih pendek sehingga layak