| | | | |
Как подружить OpenSSL и библиотеку Synapse | Полный текст материала
Другие публикации автора: Игорь Шикарев
Цитата или краткий комментарий: «... Фирма, в которой я в настоящее время тружусь, занимается написанием и сопровождением софта для касс и киосков по приему коммунальных платежей от населения. Помимо приема коммунальных платежей, кассы принимают платежи за сотовые телефоны, Яндекс-Деньги, WebMoney. Такие платежи проводятся через систему E-Port. ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 3 | 75% | | | | Ничего особенно нового и интересного | [2] | 1 | 25% | | | | Написано неверно (обязательно укажите почему) | [3] | 0 | 0% | | Всего проголосовали: 4 | | | Все понятно, материал читается легко | [1] | 3 | 100% | | | | Есть неясности в изложении | [2] | 0 | 0% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 3 |
Отслеживать это обсуждение
Всего сообщений: 1528-01-2008 01:12 причина до смешного банальна: не захотело работать, хоть и скачивал "специальные" пакеты с библиотеками OpenSSL. Поиски в инете не дали результата, только просьбы о помощи и восторженные восклицания, что "у меня заработало вот с таким набором библиотек"
Странно, на сайте поддержки indy есть ссылки на сайт компании, занимающейся коммерческой поддержкой пакета. Так там есть исходники (бесплатно) клиент-серверной системы на SSL.
Сервер компилируется и работает, а клиент я не проверял. |
|
26-01-2008 07:59сообщение от автора материала Коллеги, своей статьей я не претендую на абсолютно верное решение проблемы. Надо было закрыть проект.
Отвечаю на вопросы:
Кстати, а почему решение на Indy10 вас не устроило?
причина до смешного банальна: не захотело работать, хоть и скачивал "специальные" пакеты с библиотеками OpenSSL. Поиски в инете не дали результата, только просьбы о помощи и восторженные восклицания, что "у меня заработало вот с таким набором библиотек"
ответ для DRON:
глубокого анализа мы не проводили, надо было уложиться в сроки, поэтому применили "железобетонный" способ замены имен библиотек. Кстати, не все что пишут в MSDN на деле работает так как пишут, надо все проверять опытным путем. |
|
25-01-2008 18:58Вернёмся к моему первому вопросу... Я тут наконец нашёл время и решил проверить описываемое вами поведение, но ничего такого у себя на XP SP2 не обнаружил: никаких "но все равно винда берет уже загруженную DLL с точно таким именем". Проверял и статическую и динамическую загрузки, менял по разному IMAGEBASE, проверял как одну библиотеку, так и две связанные (ваш случай), запускал множество процессов в разном порядке...
Вобщем всё работает как и описано в MSDN, никаких сюрпризов, более того, даже в ОДИН процесс две библиотеки с одинаковыми именами грузятся совершенно нормально.
Так что видимо причина не работы ваших библиотек кроется в чём-то другом...
По результатам экспериментов могу сказать следующее:
в плане загрузки библиотек разные процессы вообще НИКАК друг на друга не влияют;
если задать полный путь до библиотеки (при динамической загрузке конечно), то никаких "замен" винда не производит, будет загружена строго заданная библиотека, даже если библиотека с таким именем уже загружена;
если задано только имя и библиотека с таким именем не была загружена в адресное пространство данного процесса (подчёркиваю, именно "данного", а что там в других значения не имеет), то приоритет имеет библиотека находящаяся в той же папке что и программа;
если задано только имя, но библиотека с таким именем уже грузилась, то использована будет именно она, независимо ни от чего.
Что у вас могло быть на самом деле:
1) Ваши библиотеки оказались внесены в "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs" что полносью меняет поведение. Детально я этот режим пока не проверял, так как надо каждый раз перезагружаться.
2) OpenSSL хранит какую-то информацию в реестре или файлах, таким образом одна версия библиотеки может что-то подпортить для другой.
3) OpenSSL использует какие-то объекты общие для всех копий, это могут быть MMF, расшареные секции итд, тогда причина может быть в несовместимости этих объектов для разных версий OpenSSL.
Проверка вариантов 2,3 на реалистичность требует копания в исходниках OpenSSL, чем я не занимался.
4) Кто-то грузит свои библиотеки OpenSSL в ваш процесс до того как это делаете вы. Такое может происходить в каком нибудь хуке или расширении оболочки (например какой нибудь приблуде, для просмотра/проверки сертификатов), но на мой взгляд очень маловероятно.
Хотелось бы всё таки узнать реальную причину проблем, поэтому возникают вопросы.
Использовали ли вы в процессе "борьбы с багом" утилиты ProcessExplorer и ProcessMonitor? Там должно быть видно в какие процессы были загружены ssleay32.dll и libeay32.dll, а также полный путь до этих библиотек для каждого процесса и порядок их загрузки. И хорошо бы ещё знать на что кроме имён библиотек влияют SSLEAY и LIBEAY, может какие-то константы в коде меняются (это я на пункты 2 и 3 намекаю). |
|
25-01-2008 06:46 Нет, слава богу, не под GPL. Более того их лицензия несовместима с GPL.
Опа, а я то был уверен в обратном.
Надо снова посмотреть.
Кстати, а почему решение на Indy10 вас не устроило? |
|
24-01-2008 12:44Вот и глупость сделали, поскольку метод совершенно официальный.
Хакерский он в смысле кривизны реализации: винда не знает о таких "библиотеках" и некоторые функции будут работать неправильно.
Библиотеки-то по GPL распространяются.
Нет, слава богу, не под GPL. Более того их лицензия несовместима с GPL. |
|
24-01-2008 10:15но наш "консилиум" программистов отнес этот метод к хакерским, поэтому отклонили.
Вот и глупость сделали, поскольку метод совершенно официальный. Библиотеки-то по GPL распространяются. Если вы их код не меняли, то можете использовать для любых целей.
Кстати, вы должны опубликовать код измененных файлов Synapce, вы это знаете (если уж речь о лицензионности)? |
|
24-01-2008 09:48
24-01-2008 09:03
24-01-2008 09:02
24-01-2008 02:37сообщение от автора материала
А почему нельзя сделать проекцию библиотек в память с другим именем, загрузив их из ресурсов приложения?
А код ссылки на библиотеки в OpenSSL подправить?
Можите привести рабочий пример такой проекции? |
|
24-01-2008 02:27А почему нельзя сделать проекцию библиотек в память с другим именем, загрузив их из ресурсов приложения?
А код ссылки на библиотеки в OpenSSL подправить? |
|
23-01-2008 02:14сообщение от автора материала Про папку WinSxS, к совему стыду, не слыхал, надо будет проработать эту тему. А вот наличие исходников от OpenSSL не дает ровным счетом ничего, так как нет легальных (не хакерских) способов вкомпилировать исходник на C в код Pascal, разве что OBJ файлы создать, но тогда надо делать и заголовочный файл для Pascal. |
|
23-01-2008 01:57Вообще-то для решения этой проблемы есть механизм WinSxS (посмотрите эту папочку). Так же не понятно зачем использовать DLL, когда есть исходники… |
|
23-01-2008 00:23сообщение от автора материала Пробовали так делать, путь указывали... но все равно винда берет уже загруженную DLL с точно таким именем, если ее кто-то уже загрузил. Если перегрузить комп, то если повезе загрузятся DLL, которые указывали в пути загрузки. Проверяли на Windows XP SP2 и Windows 2003 |
|
22-01-2008 18:27Может я конечно что-то путаю, но почему бы просто не грузить эти библиотеки через LoadLibrary с полным указанием пути? В этом случае, по идее, всё должно правильно заработать и без переименования. |
|
|
|