CURL и ГОСТ

NT Man

Новичок
Настроить OpenSSL я в файл /etc/pki/tls/openssl.cnf для этого добавил
в самый конец

[openssl_def]
engines=engine_section

[engine_section]
gost=gost_section

[gost_section]
engine_id=gost
dynamic_path = /usr/lib64/openssl/engines/libgost.so
default_algorithms=ALL
CRYPT_PARAMS=id-Gost28147-89-CryptoPro-A-ParamSet


а в начало
openssl_conf = openssl_def

модифицированный файл так-же прикладываю
 

Вложения

Airis

Новичок
Настроить OpenSSL я в файл /etc/pki/tls/openssl.cnf для этого добавил
в самый конец

[openssl_def]
engines=engine_section

[engine_section]
gost=gost_section

[gost_section]
engine_id=gost
dynamic_path = /usr/lib64/openssl/engines/libgost.so
default_algorithms=ALL
CRYPT_PARAMS=id-Gost28147-89-CryptoPro-A-ParamSet


а в начало
openssl_conf = openssl_def
это я сделал, проверил:
#openssl ciphers | grep -o '\(GOST[[:digit:]]\+-\?\
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
Смущает одна вещь меня - до установки openssl версии 1.0.0k (в каталог /gost-ssl/), в системе присутствовала версия 0.9.8е (без поддержки ГОСТ).
Как я понимаю, эти две версии прекрасно ужились вместе:
#/usr/bin/openssl version
OpenSSL 0.9.8e 23 Feb 2007
#/gost-ssl/bin/openssl version
Чтобы не тратить время, я сделал:
#mv /usr/bin/openssl /usr/bin/openssl.old
#ln -s /gost-ssl/bin/openssl /usr/bin/openssl

В результате, видим:
#/usr/bin/openssl version
НО, когда я перекомпилировал curl, все равно в информации о нем мы видим упоминание об OpenSSL 0.9.8e:
#curl -V
curl 7.19.4 (i386-portbld-freebsd7.2) libcurl/7.19.4 OpenSSL/0.9.8e zlib/1.2.3
Protocols: tftp ftp telnet dict http file https ftps
Features: IPv6 Largefile NTLM SSL libz
Вероятно, это и есть причина того, что CURL не видит ГОСТ. Как уствновить OpenSSL 1.0.0k, чтобы он был единственным в сиcтеме FreeBSD ?
Или как сделать так, чтобы curl при компиляции увидел именно новую версию OpenSSL (пробовал конфигурировать curl c указанием на новый OpenSSl опцией --with-ssl /gost-ssl/ssl/, но в ответ выдается ошибка )?
 

fixxxer

К.О.
Партнер клуба
1) прекратить разводить помойку типа /gost-ssl/. c:\php, блджад, вашужмать...
2) поставить из портов 1.0
3) собрать curl с --with-ssl=/usr/local
 

Airis

Новичок
1) прекратить разводить помойку типа /gost-ssl/. c:\php, блджад, вашужмать...
2) поставить из портов 1.0
3) собрать curl с --with-ssl=/usr/local
Про помойку с Вами согласен - самому не нравится. Дело в том, что как выяснилось, openssl ставится во FreeBSD c системой и лучший путь обновить его -
установить из портов. Только тогда все установится туда, куда нужно.
Я пошел по пути, описанному здесь:
https://mebsd.com/freebsd-security-hardening/openssl-upgrade-freebsd.html
До установки дело не дошло конечно, т.к. после обновления портов - выяснилось, что там лежит версия 0.9.8k. Мне же нужна как минимум версия OpenSSL 1.0.0

С FreeBSD общаюсь на Вы, поэтому не знаю как еще можно обновить до версии 1.0.0
 

Airis

Новичок
Итак, проблема решена (все описанное ниже актуально для ОС 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 видит ГОСТ.
 

Mishall

Новичок
Печально, но и в последних версиях PHP 5.5.27 тоже не удалось OpenSSL читать файл конфигурации .cnf.
В исходниках PHP 5.5.27 тоже не удалось найти функцию Curl_ossl_init.

Или в новых версиях существуют другие способы настройки чтения конфигурации .cnf для бинарников под Windows
 
Последнее редактирование:

NT Man

Новичок
предложенный мой патч не обязательно вносить в PHP можно внести его в курл что более правильно. Это и сделал другой участник.
В апстрим он не принят если есть желание пободаться с апстримом добро пожаловать на нашу лодку.
Хотя меня сейчас OpenSSL не интересует мне интереснее NSS так как за ним будущее.
 
Сверху