Как стать автором
Обновить

Комментарии 15

Как-то раз столкнулся с этим, когда файл, зашифрованный openssl'ем на старой системе, не хотел расшифровываться на новой.
В гугле информация о несовместимости версий находится легко по словам вроде "openssl decrypt file encrypted on old version". Сложность в том, чтобы понять, что проблема из-за разницы версий OpenSSL.

Это да) Тут не были указаны версии, только команда шифрования, да и сам формат тестового в виде CTF подразумевал, что я банально мог накосячить в вычленении данных из дампа. Но кто ж знал то)
Вообще OpenSSL в последнее время чудит. И в C++ API критические изменения и вообще.
Я понимаю, конечно, бесплатно — чего жаловаться.
Но вроде бы считается хорошим тоном менять API только в мажорных версиях…
Меня бы вполне устроило примечание в Wiki на странице enc вроде «В версии до 1.1 мы использовали для генерации ключа md5, а с 1.1 перешли на Sha256. Будьте осторожны, это ломает совместимость!». Тогда бы я сразу обратил внимание на скромный параметр -md :) Я когда гуглил, нашел на гитхабе кучу открытых задач, связанных с этим неявным изменением… Тут, конечно, сам дурак, но проведенный тест на друзьях показал, что я не одинок в своём незнании этой детали…

Не у всех проектов циферки в версиях являются major.minor.patch в смысле semver. OpenSSL точно к semver не относится.

OpenSSL имеет API на C, а не на C++.
Конечно, Вы правы, использую обертку.
Я тоже давно не работал с C API OpenSSL напрямую. У меня сейчас несколько долгоиграющих проектов, использующих библиотеку POCO, в частности и как прослойку к OpenSSL. Переход с OpenSSL 1.0.X на 1.1.X прошел вообще незаметно, несмотря на то, что сейчас POCO находится в полумертвом состоянии.

Только прошу не считать это рекламой POCO, сейчас я вряд ли бы стал с ней связываться.

Ещё и API они поломали, из-за чего старый софт требует изменения исходных кодов для сборки с новым OpenSSL. Работаю с Postgres, привык к 3-й версии PgAdmin'a, а он с новой версией OpenSSL не собирается.
Хорошо, что нашёлся патч для сборки с новым OpenSSL, он довольно большой, несколько сот изменённых строк. То же самое относится и к Qt 4 (хотя я его ставил без патча, просто отключив поддержку OpenSSL, мне она не нужна была).


Это одна из самых противных системных библиотек — часто ломается совместимость старых версий с новыми. Она вызывает больше всего проблем при переносе старых версий ПО на новые системы.

А что вы хотите? В наше время понятие "безопасный алгоритм" довольно часто устаревает. А эта библиотека — кладезь алгоритмов относящихся к безопасности. Лучше чтобы по умолчанию использовались дырявые алгоритмы?

Где-то слышал недавно, что Openssl пишут математики, а не программисты. Вот и результат. Люди совершенно не в теме того, как надо правильно вести версионирование.
Когда-то очень давно программисты были математиками…
Статья о пользе чтения мануалов :) и о том, что мелочей не бывает, вернее они являются подчас решающими.
К сожалению, в мануале данное поведение не описано…
Как-то напоролся… При переезде на более новую версию OpenSSL сломалась проверка цифровой подписи. Всё прекрасно компилируется, но не работает. Что-то поменялось в нутре функций EVP_Verify*. Помог переезд на EVP_VerifyDigest*.
Когда добавляются новые, более правильные функции — это прекрасно.
Когда старые функции обьявляются как deprecated — это нормально.
Когда старые функции (не deprecated) начинают работать как-то не так — это плохо.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.