Schannel是Windows內置的TLS協議實現。這允許在沒有任何外部庫的情況下支持安全連接。
回購包含:
SChannel.Utils.pas具有運輸不足的助手功能的單元,可輕鬆通過Windows Schannel實施TLS通信。
SChannel.SyncHandshake.pas使用回調函數進行真實通信
SChannel.Jwa*.pas -API聲明從絕地武士項目中藉來
SChannel.IcsWSocket.pas執行TLS通信的ICS Twsocket後代
Demo - 通過安全連接執行任何文本(主要是HTTPS)請求的演示項目
Enable TLS 1.1 and 1.2 for W7.reg註冊表補丁,該補丁可以在Windows 7上啟用TLS 1.1和1.2(這些是默認情況下未在W7上啟用的實際協議版本)
沒有可安裝的組件 - 您只需下載源,添加路徑和使用單元即可。但是,如果您喜歡包裝,則有兩個用RAD XE2創建的。只需在IDE中打開其中一個即可將軟件包升級到當前版本。
SChannel_XE2.dproj包含除ICS插座以外的所有單元。如果您沒有安裝ICS,請使用它SChannel_XE2_ICS.dproj包含所有單元,包括SChannel.IcsWSocket.pas中的ICS插座。需要安裝IC這兩個軟件包均配置為將單位構建為..Bin$(Config)$(Platform)以減少爛攤子,並避免每次構建項目時重新編譯Schannel單位。因此,您可以將SChannelBinRelease$(Platform)添加到搜索路徑和SChannelSource中。在這種情況下,不要忘記為您使用的所有平台構建包裝。在該安裝完成之後。
還可以通過Delphinus軟件包管理器安裝。但是,這是一個具有一些局限性的初始版本:
該項目之所以開始,是因為我需要Delphi應用程序中的TLS,並且不喜歡運送兩個OpenSSL libs。初始版本是在Internet中找到的Schannel樣本的1:1重寫。目前,它用於我的24*7個項目中,但我僅實施了所需的這些功能。我不熟悉所有這些CryptoStuff,因此不要期望高級證書驗證,安全服務器等。但是,如果您想添加一些缺少的東西,我會很高興地考慮您的公關:)。
有Schannel錯誤導致功能很少,隨機返回SEC_E_BUFFER_TOO_SMALL或SEC_E_MESSAGE_ALTERED狀態在握手期間。可以在此處找到該問題的良好描述(簡而言之:僅在Windows 7和8上發生,使用TLSV1.2和TLS_DHE_RSA_WITH_AES_128_GCM_SHA256和TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 CIPERES)。為了解決這個問題,採取了幾項措施:
增加握手的緩衝區數量(捲曲團隊所做的) - 無濟於事
添加了IsWinHandshakeBug到SChannel.Utils.pas ,該功能允許在DoClientHandshake Call的except中方便檢查該錯誤。只是一個助手來進行特殊處理
...
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 ;
...來自IcsSChannelSocket.pas和PerformClientHandshake函數的TSChannelWSocket類來自SChannel.SyncHandshake.pas 。
從ICS TWSocket降下的插座類為您帶來許多事情。關鍵功能:
Secure屬性啟動/完成; OnTLSDone和OnTLSShutdown事件將信號通道狀態SessionData.SharedCreds屬性之間共享多個插座之間。當分享會議時,握手變短了,所以值得