to post messages and comments.

Решил не так давно делать веб-запросы в программе на необновлённом Indy. Кто его знает, этого заказчика, сможет он свежую поставить или нет. Узнал много нового. Оказывается, обычная библиотека OpenSSL к Indy не подходит, потому что там требуются некоторые функции специально для Indy вроде SSL_CTX_set_options_indy. Думаю, раз она в комплект не входит, надо скачать её с сайта Indy. А вот и нет! Где библиотека, где патч, интересные люди, однако.

Полазив по форумам, нашёл такую ссылку. Скачал самую свежую. Не подошло. Методично качал другие версии с конца, потом методом дихотомии, потом тупо взял самую старую версию. Смотрел в ФАРе, есть там эти долбаные нестандартные функции или нет. Нету. Нигде. Заглянул в архив и там прямо явно видно версии с Indy в названии. Наверное, оно. Скачал 0.9.8l. Не подошло. Скачал 0.9.8h. Не подошло. Действительно, если смотреть, что там внутри, то префиксы _indy видать, но это не всё, что нужно. Оказывается, IdSSLOpenSSLHeaders10.pas там не для красоты, и без него не работает. Я ведь хотел, чтоб Indy не пересобирать, думал, на интерфейс к новым функциям можно забить, а оказывается, что там и основной интерфейс переделан, поэтому каких-то нестандартных функций нет. Впрочем, пересобирать весь Indy не пришлось, достаточно было положить только этот файлик под правильным именем в директорию проекта, он заменил собой предустановленный dcu и нормально скомпоновался с остальными модулями.

Потом выяснилось, что хотя в Delphi 2007 версия Indy 10, но если бы я на сайте Indy зашёл в Indy 9, то там была бы ссылка на SSL Support DLL's, а оттуда — на Fulgan. Если б знал, что там всё настолько плохо, попробовал начать с WinInet. Авось его неумение в SNI проканает.

После нескольких дней кровавого дебага, выяснили, что openssl пожирает 10Gb памяти на 100 тыс. клиентских сессий. И это с отключенным кэшем и компрессией.
Получается 100kb на соединение, хотя openssl-бляди заявляют о 10kb.

Боль и пичаль.

Единственный сервис из тех что я зареган (включая банки, платёжные системы, почты и регистраторы), который мне прислал письмо с рассказом что тут был баг опенссл, мы его пофиксили, но вы на всякий случай смените пароль — dynadot.com Вообще чем дольше я ими пользуюсь, тем больше уважения они вызывают. Всячески всем рекомендую. В пользу их говорит ещё, что они регистратор wikileaks.

БЛИНЪъъъ! Ну почему в openssl так всё криво? Мне не надо чтоб оно парзить пыталось публичный ключ, но вытащить прямо его исходный вид в бинаре надо. Как?! Спасибо, никак. Пошел x509 курить

оставлю это здесь. проверка соответствия ключа сертификату. на выходе должно получиться то, что было в файлике (можно echo):
cat test.txt | openssl smime -encrypt -des3 mycert.pem | openssl smime -decrypt -inkey mykey.pem

Документация у libopenssl паршивая — то ли они считают, что все и так умные и могут все, что надо, домыслить, то ли думают, что нормально структурировать информацию в манах — дурной тон.

Я думал, NIH-синдромом болеют только в Микрософт. Ан нет, у Йоппл та-же болезнь — openssl уже два года как deprecated в МакОС (с 10.7).
Взамен предлагают использовать новое криптоапи с блекдеком и шл^W^W^W блоками и пайплайнингом операций, Но мы-то знаем, что на самом деле "у openssl есть фатальный недостаток" TM.

ещё одна краткая инструкция как собирать x64 openssl под вин
берем первые 3 пункта из этого поста #952095
далее в msys bash вбиваем что-то вроде (частично пропустил то что и так понятно)

tar xf openssl-ver.tar.gz # does some symlinks magic, so solves md2 error
MAKE=mingw32-make PERL=perl.exe ./Configure mingw64 shared enable-static-engine --openssldir=/c/local
(mingw32-make.exe -j3 2>&1) > compile.log
(mingw32-make.exe install 2>&1) > compile.log

здесь /c/local это путь куда заинсталится openssl. редирект вывода в файл сделан ибо stdout/err под msys почему-то дико тормозит

Subject парсить — ручками, даты даже внутре хранятся в ASN1_STRING — в нормальном формате хрен получишь (либо тоже парсить вручную), нелатиницу ескейпит, в итоге, на каждый чих нужно делать свой лисапед.