Как СОЗДАТЬ OpenSSL для Indy

Как мне собрать OpenSSL, чтобы я мог статически связать их для использования с Indy 10.6 для платформ Windows 32/64? Есть ли где-нибудь подробное руководство по компиляции без каких-либо зависимостей VC++? Я слышал, что Indy нужен собственный код OpenSSL, а не официальный. И какой компилятор использовать? ВС2010, ВС11, ВС13?

Было бы неплохо, если бы он поставлялся с файлами .lib, как это делается для iOS.


person user3060326    schedule 03.12.2013    source источник


Ответы (1)


Indy перестал использовать специально созданные библиотеки DLL OpenSSL несколько лет назад и с тех пор использует официальные библиотеки DLL.

Однако в настоящее время Indy не поддерживает статическую компоновку OpenSSL на платформах, отличных от iOS (для этого есть пункт TODO, но не ожидайте, что он будет реализован в ближайшее время, если только кто-то другой не сделает это и не отправит изменения для включение в Инди). Даже если бы вы могли скомпилировать статические файлы .obj для OpenSSL в Windows, все равно потребовались бы некоторые изменения кода внутри исходного кода Indy, чтобы использовать эти файлы. Вам придется вносить эти изменения вручную (см. это обсуждение: Как статически связать файлы Indy SSL), пока они не будут сделаны в Indy. изначально в какое-то будущее время.

Единственная причина, по которой Indy статически поддерживает OpenSSL на iOS, заключается в том, что Apple не разрешает динамическое использование OpenSSL на устройствах iOS (хотя в симуляторе iOS это разрешено). Любая другая платформа позволяет динамически загружать OpenSSL, и именно так OpenSSL в первую очередь предназначен для использования.

person Remy Lebeau    schedule 03.12.2013
comment
Что ж, у Эльдоса есть решение. Но это стоит 1500 долларов. Так почему же Windows исключена, а iOS нет? Наличие dll менее безопасно из-за атак с перехватом dll. Здесь вы не упоминаете, что это невозможно сделать. ссылка - person user3060326; 03.12.2013
comment
Опять же, Apple требует, чтобы OpenSSL (и любая другая сторонняя библиотека, если уж на то пошло) была статически скомпилирована в приложения iOS, возможность динамического использования внешних библиотек отсутствует. Это единственная причина, по которой Indy поддерживает статическую версию OpenSSL на iOS. Никакая другая платформа (включая симулятор iOS) не имеет такого ограничения, поэтому никогда раньше не было необходимости в статической поддержке OpenSSL на каких-либо платформах. - person Remy Lebeau; 04.12.2013
comment
Что касается другого обсуждения, упомянутые в нем № 2 и № 4 (редактирование IdCompilerDefines.inc и IdSSLOpenSSLHeaders_static.pas для распознавания статических библиотек OpenSSL в Windows) имеют еще не реализован в Indy. Но я коснулся этого выше, когда сказал, что это потребует изменений кода в исходном коде Indy. - person Remy Lebeau; 04.12.2013
comment
да, мы знаем, как HeartBleed влияет на OpenSSL. Реализация Indy небезопасна, и точка! - person user3060326; 21.04.2014
comment
Heartbleed не имеет ничего общего с Indy, это ошибка внутри самого OpenSSL. Все, что вам нужно сделать, это развернуть последние библиотеки DLL OpenSSL с вашим приложением на основе Indy, и Heartbeat больше не будет иметь значения. Никаких изменений в коде и перекомпиляции не требуется (кроме приложений для iOS). - person Remy Lebeau; 22.04.2014
comment
Почему бы не использовать реализацию Windows SSL для SSL? Когда это будет добавлено в Indy? - person user3060326; 22.04.2014
comment
Он есть в списке TODO, но ETA для него пока нет, так как я никогда раньше не работал с этим конкретным API. Кроме того, это касается только Windows, но Indy поддерживает использование OpenSSL на многих других платформах. - person Remy Lebeau; 22.04.2014
comment
CleverComponents HTTP не нуждается в DLL и использует SSL... так что это очень плохой аргумент. - person user3060326; 22.04.2014
comment
Насколько я знаю, Clever использует собственную реализацию SSL/TLS, написанную с нуля. Это важное мероприятие, которое Indy не сделает в ближайшее время из-за нехватки времени и рабочей силы, не говоря уже о том, что пользовательские приложения подчиняются международным законам об импорте/экспорте встроенного кода шифрования. Indy использует OpenSSL, потому что он широко доступен и широко поддерживается на большинстве платформ и легко обновляется при выпуске исправлений, не требуя перекомпиляции пользовательских приложений. Indy начнет поддерживать API-интерфейсы шифрования Microsoft в Windows в будущем выпуске, но другие платформы не имеют собственных API-интерфейсов шифрования, поэтому OpenSSL. - person Remy Lebeau; 22.04.2014
comment
Это не очень плохой аргумент, это преднамеренное дизайнерское решение для кроссплатформенной поддержки. - person Remy Lebeau; 22.04.2014