Как добавить поддержку HTTPS в приложение загрузки Delphi WinSock HTTP? - PullRequest
0 голосов
/ 28 октября 2011

В коммерческой библиотеке Delphi функции WinSock API, такие как WinSock.connect и WinSock.send, используются для загрузки файлов на сервер HTTP. Есть ли способ поддержать HTTPS? Я нашел http://www.rohitab.com/discuss/topic/36630-ssl-through-winsock/, который говорит:

Вам нужно будет выбрать один из следующих методов:

  • A. Используйте библиотеку WinINet.
  • B. Используйте обычные сокеты и поддержку WinCrypt RSA для соответствия спецификации SSL.
  • C. Используйте openssl или другую библиотеку.

Ответы [ 3 ]

2 голосов
/ 28 октября 2011

Да, конечно.Безусловно, самым простым для вас будет использование WinInet, поскольку он выполнит все необходимые для вас рукопожатия SSL.

Реализация SSL поверх сокета, безусловно, выполнима, но потребует (в целом) большей работы,Если вы пойдете по этому пути, я бы предложил OpenSSL;это то, что мы использовали в прошлом, когда нам приходилось вручную раскручивать SSL.

Просто добавьте это здесь: другой подход, если вы владеете как клиентской, так и серверной стороной и не можете использовать Wininetпо какой-то причине стоит зашифровать файл на клиенте перед загрузкой.Вы по-прежнему будете иметь те же уязвимости, что и без SSL (например, анализ трафика, посредник, повторные атаки и т. Д.), Но, по крайней мере, данные файла будут в безопасности ... при условии, что сам ключ шифрования не передается.

На SO есть примеры использования Wininet от Delphi;см. Как отправить HTTP-запрос POST в Delphi с помощью WinInet api

1 голос
/ 29 октября 2011

Добавьте в свой (возможно, устаревший) список HTTPS-совместимых решений:

D.Используйте WinHTTP api вместо WinINet.

API WinHttp и WinINet очень близки.Но WinHttp намного быстрее, чем WinINet.

Вот , как Microsoft определяет WinHTTP :

Службы Microsoft Windows HTTP (WinHTTP) предоставляют разработчикам поддерживаемую серверомвысокоуровневый интерфейс к HTTP / 1.1 интернет-протоколу.WinHTTP предназначен для использования преимущественно в серверных сценариях серверными приложениями, которые взаимодействуют с HTTP-серверами.

WinINet был разработан как клиентская платформа HTTP для интерактивных настольных приложений, таких как Microsoft Internet Explorer, Microsoft Office иMicrosoft Money.WinINet отображает пользовательский интерфейс для некоторых операций, таких как сбор учетных данных пользователя.WinHTTP, однако, обрабатывает эти операции программно.Серверные приложения, которым требуются клиентские службы HTTP, должны использовать WinHTTP вместо WinINet.Для получения дополнительной информации см. Портирование приложений WinINet на WinHTTP.

WinHTTP также предназначен для использования в системных службах и клиентских приложениях на основе HTTP.Однако однопользовательские приложения, которым требуются функции протокола FTP, сохранение файлов cookie, кэширование, автоматическая обработка диалоговых данных учетных данных, совместимость с Internet Explorer или поддержка платформы более низкого уровня, следует рассмотреть возможность использования WinINet.

Вы можете напрямую использовать WinHTTPCOM-объект (с помощью позднего связывания) или использование низкоуровневого API (очень близкого к WinINet).Смотрите, например, наш модуль с открытым исходным кодом (Delphi 5 до XE2).Эта ссылка содержит таблицу плюсов и минусов.

Просто для того, чтобы подчеркнуть интерес WinHTTP: насколько я понял, реализация WCF от Microsoft использует ее для всех своих коммуникаций HTTP / 1.1 (такжепосмотрите на режим ядра http.sys для серверной стороны в том же модуле - который используется также WCF).

1 голос
/ 28 октября 2011

HTTPS легко внедряется в Delphi с компонентами Indy TIdHTTP и TIdSSLIOHandlerSocketOpenSSL и OpenSSL. Вы будете зависеть от включения библиотек OpenSSL.

Существуют также собственные решения Delphi, такие как SecureBlackBox от Eldos и IPWorks SSL от N Software.

Реализовать самостоятельно не так сложно, если у вас есть необходимые компоненты. Вы могли бы даже создать свою собственную замену достаточно легко, если вам не нужно поддерживать стандарты TLS и SSL, но вам все равно понадобится некоторая форма асимметричных и симметричных алгоритмов шифрования и способ проверки сертификата, если вы хотите сделать что-нибудь как криптографически безопасное.

...