Schannel은 TLS 프로토콜의 Windows 내장 구현입니다. 이를 통해 외부 라이브러리없이 안전한 연결을 지원할 수 있습니다.
Repo는 다음과 같습니다.
SChannel.Utils.pas 전송 공수 조력체가있는 장치는 Windows Schannel을 통해 TLS 통신을 쉽게 구현할 수 있도록 기능합니다.
SChannel.SyncHandshake.pas 실제 통신을위한 콜백 함수를 사용한 전송 공수 동기 TLS 핸드 셰이크 샘플
SChannel.Jwa*.pas Jedi Project에서 빌린 API 선언
SChannel.IcsWSocket.pas -ICS TWSOCKE DEFCELDANT TLS 커뮤니케이션을 수행합니다
Demo - 보안 연결을 통한 텍스트 (주로 https) 요청을 수행하기위한 데모 프로젝트
Enable TLS 1.1 and 1.2 for W7.reg
설치 가능한 구성 요소가 없습니다. 소스를 다운로드하고 경로를 추가하며 유닛을 사용하면됩니다. 그러나 패키지를 선호하는 경우 RAD XE2로 만들어진 두 개가 있습니다. IDE에서 그들 중 하나를 열면 패키지를 현재 버전으로 업그레이드해야합니다.
SChannel_XE2.dproj 에는 ICS 소켓을 제외한 모든 장치가 포함되어 있습니다. IC가 설치되지 않은 경우 사용하십시오SChannel_XE2_ICS.dproj SChannel.IcsWSocket.pas 의 ICS 소켓을 포함한 모든 장치가 포함되어 있습니다. IC가 설치되어 있어야합니다 두 패키지는 모두에 대한 단위를 빌드하도록 구성되어 있습니다 ..Bin$(Config)$(Platform) 따라서 검색 경로에 SChannelBinRelease$(Platform) 를 추가하고 SChannelSource 에 브라우징 경로를 추가 할 수 있습니다. 이 경우 사용하는 모든 플랫폼에 대한 패키지를 구축하는 것을 잊지 마십시오. 그 설치 후 완료된 후.
Delphinus 패키지 관리자를 통한 설치도 가능합니다. 그러나 몇 가지 제한 사항이있는 초기 버전입니다.
이 프로젝트는 Delphi 앱에 TLS가 필요했고 두 개의 OpenSSL Libs를 배송하는 것을 좋아하지 않기 때문에 시작되었습니다. 초기 버전은 인터넷에서 발견 된 Schannel 샘플의 1 : 1 재 작성입니다. 현재 24*7 프로젝트에 사용되지만 필요한 기능 만 구현했습니다. 나는이 모든 cryptostuff에 익숙하지 않으므로 고급 인증서 유효성 검사, 보안 서버 등을 기대하지 마십시오. 그러나 당신이 놓친 것을 추가하고 싶다면 나는 당신의 PR을 즐거움으로 고려할 것입니다 :).
핸드 셰이크 동안 SEC_E_BUFFER_TOO_SMALL 또는 SEC_E_MESSAGE_ALTERED status를 드물고 무작위로 반환하는 기능을 일으키는 Schannel 버그가 있습니다. 이 문제에 대한 좋은 설명은 여기에서 찾을 수 있습니다 (간단히 : TLSV1.2 및 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 및 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 CIPHER SUITES에서만 Windows 7과 8에서만 발생합니다. 이 문제를 다루기 위해 몇 가지 조치가 취해졌습니다.
핸드 셰이크를위한 버퍼 수 증가 (Curl Team이 한 일) - 도움이되지 않았습니다.
추가 기능 IsWinHandshakeBug 에 SChannel.Utils.pas 에 DoClientHandshake 호출 섹션을 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 ;
... SChannel.SyncHandshake.pas 에서 IcsSChannelSocket.pas 의 TSChannelWSocket 클래스 클래스 및 PerformClientHandshake 함수.
많은 일을하는 ICS TWSocket 에서 내려 오는 소켓 클래스. 주요 기능 :
Secure 속성을 설정하여 언제라도 시작/완료 할 수 있습니다. OnTLSDone 및 OnTLSShutdown 이벤트는 채널 상태를 알립니다SessionData.SharedCreds 속성을 사용한 여러 소켓간에 공유 할 수 있습니다. 세션이 공유되면 핸드 셰이크가 상당히 짧아 지므로 가치가 있습니다.