Schannel ist eine integrierte Windows-Integration von TLS-Protokollen. Dies ermöglicht die Unterstützung sicherer Verbindungen ohne externe Bibliothek.
Repo enthält:
SChannel.Utils.pas - Einheit mit transport -agnostischen Helferfunktionen zur einfachen Implementierung der TLS -Kommunikation mittels Windows Schannel.
SChannel.SyncHandshake.pas - Probe des transportagnostischen synchronen TLS -Handshake mit Rückruffunktionen für echte Kommunikation
SChannel.Jwa*.pas - API -Erklärungen aus dem Jedi -Projekt entliehen
SChannel.IcsWSocket.pas - ICS TWSOCKET DESCKENTION, der TLS -Kommunikation durchführt
Demo - Demo -Projekt zur Durchführung von textuellen (hauptsächlich HTTPS) -Ansagen über sichere Verbindung
Enable TLS 1.1 and 1.2 for W7.reg - Registry -Patch, das TLS 1.1 und 1.2 unter Windows 7 aktiviert (dies sind tatsächliche Protokollversionen, die auf W7 nicht standardmäßig aktiviert sind).
Es gibt keine installierbaren Komponenten - Sie können nur Quellen herunterladen, Pfade hinzufügen und Einheiten verwenden. Wenn Sie jedoch Pakete bevorzugen, werden zwei von ihnen mit Rad XE2 erstellt. Öffnen Sie einfach einen von ihnen in IDE und es sollte das Paket auf die aktuelle Version aktualisieren.
SChannel_XE2.dproj enthält alle Einheiten außer ICS Socket. Verwenden Sie es, wenn Sie keine ICs installiert habenSChannel_XE2_ICS.dproj enthält alle Einheiten, einschließlich ICS -Socket in SChannel.IcsWSocket.pas . Erfordert ICs installiert Beide Pakete sind so konfiguriert, dass Einheiten auf ..Bin$(Config)$(Platform) erstellt werden, um das Chaos zu reduzieren und bei jedem Erstellen eines Projekts Schannel -Einheiten zu vermeiden. Sie können also SChannelBinRelease$(Platform) zu Ihrem Suchpfad und SChannelSource zum Browserpfad hinzufügen. Vergessen Sie nicht, das Paket für alle von Ihnen verwendeten Plattformen zu erstellen. Nach dieser Installation ist abgeschlossen.
Die Installation über Delphinus Package Manager ist ebenfalls möglich. Es ist jedoch eine erste Version, die einige Einschränkungen hat:
Dieses Projekt wurde gestartet, weil ich TLS in meinen Delphi -Apps brauchte und nicht mochte, zwei OpenSSL -Libs zu versenden. Die Erstversion war 1: 1 Umschreiben der im Internet gefundenen Schannel -Probe. Derzeit wird es in meinen 24*7 -Projekten verwendet, aber ich habe nur die Funktionen implementiert, die ich brauchte. Ich bin mit all diesen Cryptostuff nicht vertraut. Erwarten Sie also nicht erweiterte Zertifikatbestätigungen, sichere Server usw. Aber wenn Sie etwas fehlen möchten, werde ich Ihre PR mit Vergnügen betrachten :).
Es gibt Schannel -Fehler, der Funktionen selten und zufällig zurücksetzt, SEC_E_BUFFER_TOO_SMALL oder SEC_E_MESSAGE_ALTERED Status während des Handshake. Eine gute Beschreibung des Problems ist hier zu finden (kurz: Es geschieht nur unter Windows 7 und 8, mit TLSV1.2 und TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 und TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 CIPHER -POSTES). Um das Problem zu lösen, wurden mehrere Maßnahmen ergriffen:
Eine erhöhte Anzahl von Puffern für Handshake (was das Curl -Team getan hat) - hat nicht geholfen
FORTION FUNKTION IsWinHandshakeBug zu SChannel.Utils.pas , mit dem except dem Abschnitt eines Mestes eines DoClientHandshake bequem nach dem Fehler prüft. Nur ein Helfer, um eine besondere Verarbeitung zu machen wie wie
...
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 -Klasse von IcsSChannelSocket.pas und PerformClientHandshake -Funktion von SChannel.SyncHandshake.pas implementieren bereits einmalige Wiederholung von einmaliger Wiederholung an einen Anrufer.
Socket -Klasse, die von ICS TWSocket abstammt, die viele Dinge für Sie tut. Schlüsselmerkmale:
Secure Eigenschaft festlegen. OnTLSDone und OnTLSShutdown -Ereignisse signalisieren den KanalstatusSessionData.SharedCreds -Eigenschaft geteilt werden. Wenn Sitzungen geteilt werden, wird der Handschlag erheblich kürzer