Здравствуйте. Я разрабатывю сервис на PHP для интеграции с порталом госуслуг по протоколу SOAP. Они требуют, чтоб соединение было защищено и зашифровано по ГОСТ. Имеется:
- Ubuntu 15.04
- OpenSSL 1.0.1f со включенной поддержкой ГОСТ шифрования.
- curl 7.45.0-DEV (libcurl/7.37.1 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3)
По инструкции сгенерировал тестовый сертификат КриптоПРО, отправил им его. OpenSSL подключается нормально.
openssl s_client -connect address.ru:443 -CAfile '/home/ipc/cert/cacert.pem' -cert '/home/ipc/cert/certificate.pem' -key '/home/ipc/cert/private.pem'
Но curl'ом установить защищённое соединение не получается
curl --engine gost address.ru:443 --cert '/home/ipc/cert/certificate.pem' --key '/home/ipc/cert/private.pem' --ciphers TLSv1 --cacert '/home/ipc/cert/cacert.pem'
выдаёт ошибку "curl: (51) SSL: couldn't get peer certificate!"
Начал анализировать трафик Wireshark'ом и заметил, что в списке ciphers, который передаёт curl в пакете Client Hello нет ГОСТ'ов, а в OpenSSL есть. В интернете нашёл информацию, что с некоторых пор curl использует криптопровайдер NSS, вместо OpenSSL. Пересобрал crul без поддержки nss и с поддержкой openssl. Но делу это не помогло. То есть курл так и не передаёт ГОСТЫ в списке поддерживаемых шифров. Подскажите, как заставить curl работать с ГОСТ'овскими шифрами?