Schannel-это встроенная реализация протоколов TLS Windows. Это позволяет поддержать безопасные соединения без какой -либо внешней библиотеки.
Репо содержит:
SChannel.Utils.pas - единица с транспортными вспомогательными функциями для легкой реализации связи TLS с помощью Windows Schannel.
SChannel.SyncHandshake.pas - Образец транспорта -алкогольного рукопожатия TLS с использованием функций обратного вызова для реальной связи
SChannel.Jwa*.pas - Декларации API, заимствованные в проекте Jedi
SChannel.IcsWSocket.pas - ICS Twsocket Потомки, который выполняет TLS Communication
Demo - Демо -проект для выполнения любых текстовых (в основном https) запросов через безопасное соединение
Enable TLS 1.1 and 1.2 for W7.reg - патч реестра, который позволяет TLS 1.1 и 1.2 в Windows 7 (это фактические версии протокола, которые не включены по умолчанию на W7)
Там нет установленных компонентов - вы можете просто загрузить источники, добавить пути и использовать единицы. Но если вы предпочитаете пакеты, есть два из них, созданных с Rad XE2. Просто откройте один из них в IDE, и он должен обновить пакет до текущей версии.
SChannel_XE2.dproj содержит все единицы, кроме гнезда ICS. Используйте его, если у вас не установлен ICSSChannel_XE2_ICS.dproj содержит все единицы, включая сокет ICS в SChannel.IcsWSocket.pas . Требуется установленные ICS Оба пакета настроены на создание единиц в ..Bin$(Config)$(Platform) чтобы уменьшить беспорядок и избежать перекомпиляции единиц Schannel каждый раз, когда строится проект. Таким образом, вы можете добавить SChannelBinRelease$(Platform) в свой путь поиска и SChannelSource к пути просмотра. В этом случае не забудьте построить пакет для всех платформ, которые вы используете. После этой установки завершена.
Также возможна установка через Delphinus Package Manager. Тем не менее, это начальная версия, которая имеет некоторые ограничения:
Этот проект был запущен, потому что мне нужны были TLS в моих приложениях Delphi, и мне не нравилось отправлять две openssl libs. Первоначальная версия была 1: 1 Переписывание образца Schannel, найденная в Интернете. В настоящее время он используется в моих проектах 24*7, но я реализовал только те функции, которые мне нужны. Я не знаком со всеми этими криптоставами, поэтому не ожидайте расширенных подтверждений сертификатов, безопасных серверов и так далее. Но если вы хотите добавить что -то, что не хватает, я рассмотрим ваш пиар с удовольствием :).
Есть ошибка 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 CIPHER Sufies). Чтобы решить эту проблему, было принято несколько мер:
Увеличение количества буферов для рукопожатия (что сделала команда Curl) - не помогло
Добавлена функция IsWinHandshakeBug к SChannel.Utils.pas , которые позволяют удобно проверять ошибку в except вызова DoClientHandshake . Просто помощник, чтобы сделать специальную обработку, как
...
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 от IcsSChannelSocket.pas и функция PerformClientHandshake от SChannel.SyncHandshake.pas уже реализуют единовременную повторение невидимо невидимо.
Класс сокетов, спускающийся от ICS TWSocket который делает для вас много вещей. Ключевые функции:
Secure свойство; События OnTLSDone и OnTLSShutdown будут сигнализировать о состоянии каналаSessionData.SharedCreds . Когда сеансы разделяются, рукопожатие становится значительно короче, так что оно стоит