Ремарка: все тесты были на Ubuntu Server 14.04, так же все это справедливо для версии openssl >= 1.0.0. Не советую использовать эту сборку curl для всего что угодно, так как она может быть сильно хуже по возможностям стандартной, так как я компилировал утилиту всего с 1 флагом, и соответственно мог упустить уйму важных ее возможностей. Советую использовать ее как доп утилиту в папке проекта или где попало, не советую в продакшен использовать везде где попало, ну или если с головой подходить к флагам компиляции и сделать это хорошо и по настоящему, у меня такой цели не стоит, делаю на скорую руку, просто как рабочее решение.
-
Устанавливаем openssl
apt-get install -y openssl
-
Настраиваем в linux curl программе (не путать с библиотеками языков типа php_curl.so, там уже сами, но принцип тот же) поддержку криптографических движков:
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
Для этого в файле /usr/lib/ssl/openssl.cnf в глобальном пространстве (то есть до первой секции - "[..]") добавляем строчки
openssl_conf = openssl_def [openssl_def] engines = engine_section
[engine_section] gost = gost_section
[gost_section] engine_id = gost default_algorithms = ALL CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
```
-
Проверяем что у нас появилась поддержка ГОСТ движков в openssl.
root@b2d31954e0e6:# openssl ciphers|tr ':' '\n' | grep GOS
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
root@b2d31954e0e6:#
-
Качаем последнюю версию curl по ссылке https://curl.haxx.se/download.html, в моем случае это было https://curl.haxx.se/download/curl-7.49.1.tar.gz
-
Качаем куда удобно и распаковываем, я работал в ~
cd ~ curl https://curl.haxx.se/download/curl-7.49.1.tar.gz > curl-7.49.1.tar.gz tar -xzf curl-7.49.1.tar.gz ```
-
Устанавливаем libssl-dev и утилиту make
apt-get install libssl-dev make
-
Пересобираем и компилируем curl с поддержкой локальной версии openssl.
cd curl-7.49.1/
./configure --with-ssl
make
-
В результате у нас должна появиться скомпилированая утилита в папке src. Проверяем что все ок. Если при компиляции утилиты произошли ошибки, то прелагаю вам их решить самостоятельно, все есть в гугле.
root@b2d31954e0e6:~/curl-7.49.1# src/curl -V curl 7.49.1 (x86_64-pc-linux-gnu) libcurl/7.49.1 OpenSSL/1.0.1f zlib/1.2.8 Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets ```
-
Используем готовую утилиту по своему усмотрению :)
src/curl https://example.com/ --cacert /cacer-2015.pem
-
Для конвертации файлакорневого сертификата КРИПТОПРО из формата p7b в нормальный формат PEM подходит вот такая команда
openssl pkcs7 -inform DER -outform PEM -print_certs -in cert.p7b -out cert.pem
Полезные ссылки:
https://www.altlinux.org/%D0%93%D0%9E%D0%A1%D0%A2_%D0%B2_OpenSSL
В комментариях можете дополнения писать и другие подводные камни, если кому пригодится ))