Итак, проблема решена (все описанное ниже актуально для ОС FreeBSD, в моем случае версия 7.2)
Первое, что необходимо - установить OpenSSL версии >= 1.0.0 (главное, чтобы была поддержка ГОСТ). Желательно установить из пакетов!
Будем ставить с помощью pkg_add, ибо обновлять все порты ради установки одного пакета - очень долго. Для этого
укажем репозиторий со свежими пакетами в последнем стабильном релизе FreeBSD:
#setenv PACKAGESITE
ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-9.0-stable/Latest/
По информации указанной
здесь, в файл /etc/make.conf была добавлена строка
И установим пакет:
#pkg_add -r -f -F openssl
(в stdout увидим, что потянулась версия OpenSSL 1.0.1c)
Готово! OpenSSL установлен в /usr/local/bin/. Конфиг расположен здесь /usr/local/openssl/openssl.cnf
Настраиваем конфиг:
в начало:
openssl_conf = openssl_def
в конец:
[openssl_def]
engines=engine_section
[engine_section]
gost=gost_section
[gost_section]
engine_id=gost
dynamic_path = /usr/local/lib/engines/libgost.so
default_algorithms=ALL
CRYPT_PARAMS=id-Gost28147-89-CryptoPro-A-ParamSet
Делаем доступным вызов OpenSSL (согласно переменной окружения PATH):
#mv /usr/bin/openssl /usr/bin/openssl.old
#ln -s /usr/local/bin/openssl /usr/bin/openssl
Проверяем поддержку ГОСТ в OpenSSL:
#openssl ciphers | grep -o '\(GOST[[:digit:]]\+-\?\
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
#openssl engine
(dynamic) Dynamic engine loading support
(gost) Reference implementation of GOST engine
Видим, что все впорядке - ГОСТ поддерживается. Тут даже можно попробовать приконнектиться к какому-нибудь сайту с поддержкой ГОСТ (выше есть примеры).
Далее очередь за cURL. После долгих изысканий и N-х попыток перекомпиляций исходников cURL результата не было. Команда curl --engine list по прежнему
не выводила информацию о поддержке ГОСТ:
#curl --engine list
Build-time engines:
dynamic
В результате проблема была решена, благодаря информации на сайте
http://sourceforge.net/p/curl/bugs/1208/
Решение было таким - нужно в исходный файл cURL "lib/ssluse.c" добавить строку "OPENSSL_config(NULL);"
Образец
было
int Curl_ossl_init(void)
{
#ifdef HAVE_ENGINE_LOAD_BUILTIN_ENGINES
ENGINE_load_builtin_engines();
#endif
стало
int Curl_ossl_init(void)
{
OPENSSL_config(NULL);
#ifdef HAVE_ENGINE_LOAD_BUILTIN_ENGINES
ENGINE_load_builtin_engines();
#endif
Устанавливаем сURL c нашим патчем:
#./configure && make install
Готово! Проверяем:
#curl --engine list
Build-time engines:
dynamic
gost
Видно, что теперь cURL видит ГОСТ.