Re: Поддержка Рутокен ЭЦП в OpenSSL

Формат PKCS#7 предполагает наличие сертификата. У вас конфиг берется не из того места. Вам надо правильно указать переменную окружения OPENSSL_CONF

Re: Поддержка Рутокен ЭЦП в OpenSSL

Подскажите, возможна ли миграция с КриптоПро на openssl ?

Опишу ситуацию подробнее, чтобы был понятен вопрос. Для работы с некоторым сайтом была преобретена ЭЦП. Удостоверяющий центр выдал нам USB носитель рутокен и комплект ПО "Крипто Про CSP". Мой коллега с помощью данного ПО подписал запрос на сайт (т.е. все необходимые действия для инициализации токена уже выполнены, с помощью КриптоПро можно подписывать запросы). Сейчас стоит задача переноса всего этого хозяйства на сервер. Проблема в том, что у нас нет виндовых серверов, по этому использовать КриптоПро мы не можем. Но нам отлично подойдет openssl для подписи запросов.

Подскажите каким образом в этой замечательной схеме мне заменить КриптоПро/windows на openssl/linux?

p.s. ключи внутри токена не экспортируемые.

Re: Поддержка Рутокен ЭЦП в OpenSSL

Viktor пишет:

Подскажите, возможна ли миграция с КриптоПро на openssl ?

Опишу ситуацию подробнее, чтобы был понятен вопрос. Для работы с некоторым сайтом была преобретена ЭЦП. Удостоверяющий центр выдал нам USB носитель рутокен и комплект ПО "Крипто Про CSP". Мой коллега с помощью данного ПО подписал запрос на сайт (т.е. все необходимые действия для инициализации токена уже выполнены, с помощью КриптоПро можно подписывать запросы). Сейчас стоит задача переноса всего этого хозяйства на сервер. Проблема в том, что у нас нет виндовых серверов, по этому использовать КриптоПро мы не можем. Но нам отлично подойдет openssl для подписи запросов.

Подскажите каким образом в этой замечательной схеме мне заменить КриптоПро/windows на openssl/linux?

p.s. ключи внутри токена не экспортируемые.

Если ключи неэкспортируемые, просто так их достать из контейнера наверное не получится. Возможно, следует рассмотреть вариант использования КриптоПро для Linux или КриптоПро JCP.

Re: Поддержка Рутокен ЭЦП в OpenSSL

Кирилл Мещеряков пишет:

Ответ от нашего разработчика, который разбирался в проблеме:
Тут речь идет об архитектуре x86_64, но думаю что для x86 будет похоже.

Из-за экспортных ограничений USA в дистрибутивах fedora, rhel, centos, и т.д. используется openssl без поддержки эллиптических кривых.

Идея, как это исправить, взята тут: https://bitcointalk.org/index.php?topic … #msg946289

yum install mock
yumdownloader --source openssl

Далее предполагается, что структура каталогов для сборки пакетов уже настроена.

rpm -ivh openssl-1.0.0j-1.fc17.src.rpm

правим SPECS/openssl.spec:

Заменяем SOURCE0 на скачанный из

http://www.openssl.org/source/openssl-1.0.0j.tar.gz 

Включаем сборку с EC.
После "./Configure" примерно на третей строке увидите:

enable-cms enable-md2 no-idea no-mdc2 no-rc5 no-ec no-ecdh no-ecdsa \

меняем так, чтобы получилось:

enable-cms enable-md2 no-idea no-mdc2 no-rc5 enable-ec enable-ecdh enable-ecdsa \

Отключаем

Source1: hobble-openssl

(line 29) чтобы стало так:

#Source1: hobble-openssl

закомментируем еще одну строчку

%{SOURCE1} > /dev/null

получилось так:

#%{SOURCE1} > /dev/null

Увеличим номер релиза "Release:"

"Release:" 

меняем

Release: 1%{?dist}

должно получиться так:

Release: 2%{?dist}

(готовый openssl.spec)

rpmbuild -bs ~/redhat/SPECS/openssl.spec

mock -r fedora-17-x86_64 ~/redhat/SRPMS/openssl-1.0.0j-2.fc17.R.src.rpm

устанавливаем, результат.

rpm -Uvh ~/redhat/RPMS/x86_64/openssl-1.0.0j-2.fc17.R.x86_64.rpm
yum install pcsc-lite-ccid pcsc-tools.x86_64
service pcscd restart

Fedora 18, проделал все вышеописанные махинации:
1) скачал не обрезанный openSSL
wget http://www.openssl.org/source/openssl-1.0.1c.tar.gz
2) прописал его в spec
  30:  Source: openssl-%{version}.tar.gz
3) включил ec
228:  enable-cms enable-md2 no-mdc2 no-rc5 enable-ec no-ec2m enable-ecdh enable-ecdsa no-srp \
4) закоментил Source1
  31:   #Source1: hobble-openssl
142:   #%{SOURCE1} > /dev/null
5) Увеличил номер релиза
   24:  Release: 8%{?dist}

Запускаю построение
rpmbuild -bb ~/rpmbuild/SPECS/openssl.spec
получаю ошибку:

make[2]: Entering directory `/home/mikhail/rpmbuild/BUILD/openssl-1.0.1c/apps'
../libcrypto.so: undefined reference to `FIPS_ecdsa_openssl'
../libcrypto.so: undefined reference to `FIPS_ec_key_generate_key'
../libcrypto.so: undefined reference to `FIPS_ecdh_openssl'
../libcrypto.so: undefined reference to `fips_ec_gfp_nist_method'
../libssl.so: undefined reference to `EVP_ecdsa'
../libcrypto.so: undefined reference to `fips_ec_gfp_mont_method'
../libcrypto.so: undefined reference to `fips_ec_gfp_simple_method'
collect2: error: ld returned 1 exit status
make[2]: *** [link_app.gnu] Error 1
make[2]: Leaving directory `/home/mikhail/rpmbuild/BUILD/openssl-1.0.1c/apps'
make[1]: *** [openssl] Error 2
make[1]: Leaving directory `/home/mikhail/rpmbuild/BUILD/openssl-1.0.1c/apps'
make: *** [build_apps] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.rYYbgG (%build)


в чем проблема?

Re: Поддержка Рутокен ЭЦП в OpenSSL

В RedHat мне подсказали, что fips патчи виноваты в итоге после исключения патчей 40, 56, 58, 67 удалось собрать rpm пакет.
https://bugzilla.redhat.com/show_bug.cgi?id=319901

Но это не решило проблему использования вашей библиотеки:

$ openssl ciphers
Error configuring OpenSSL
3075643116:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(/usr/lib/pkcs11-gost/libpkcs11_gost.so): libcrypto.so.1.0.0: cannot open shared object file: No such file or directory
3075643116:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
3075643116:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:450:
3075643116:error:260BC066:engine routines:INT_ENGINE_CONFIGURE:engine configuration error:eng_cnf.c:204:section=pkcs11_section, name=dynamic_path, value=/usr/lib/pkcs11-gost/libpkcs11_gost.so
3075643116:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:conf_mod.c:235:module=engines, value=engine_section, retcode=-1

Re: Поддержка Рутокен ЭЦП в OpenSSL

Скажите, а /usr/lib/pkcs11-gost/libpkcs11_gost.so существует?

Re: Поддержка Рутокен ЭЦП в OpenSSL

Виктор Ткаченко пишет:

Скажите, а /usr/lib/pkcs11-gost/libpkcs11_gost.so существует?

# ls -la /usr/lib/pkcs11-gost
total 2388
drwxr-xr-x.   2 root root    4096 янв.  11 13:17 .
dr-xr-xr-x. 196 root root  102400 янв.  14 13:00 ..
-rwxr-xr-x.   1 root root  190263 дек.   9  2011 libpkcs11_gost.so
-rwxr-xr-x.   1 root root 2138760 дек.   8  2011 librtpkcs11ecp.so

Re: Поддержка Рутокен ЭЦП в OpenSSL

/usr/lib/libp11.so.2 именно из нашего архива? Libtool установлен?

Re: Поддержка Рутокен ЭЦП в OpenSSL

$ md5sum /usr/lib/libp11.so.2
890251a241b9041de7885046d4b1b04a  /usr/lib/libp11.so.2
$ sha1sum /usr/lib/libp11.so.2
3d161218dc7bd163232144e252e56f7b3b8e47a8  /usr/lib/libp11.so.2

$ rpm -q libtool
libtool-2.4.2-7.fc18.i686

Re: Поддержка Рутокен ЭЦП в OpenSSL

День добрый.

Пытаюсь прикрутить поддержку ГОСТ/OpenSSL к Debian Squeeze x64. Пока, к сожалению, безуспешно.

Что сделано:
Поставил обновлённые пакеты из Wheezy (дополнительных зависимостей они с собой практически не потянули)

$ apt-show-versions openssl opensc pcscd libtool libccid libpcsclite1
libccid 1.4.7-1 newer than version in archive
libpcsclite1 1.8.4-1 newer than version in archive
libtool 2.4.2-1.1 newer than version in archive
opensc 0.12.2-3 newer than version in archive
openssl 1.0.1e-1 newer than version in archive
pcscd 1.8.4-1 newer than version in archive

Скачал архив с http://ubuntuone.com/2vPRtZZA1jSHRilHa292xd , библиотеки положил по инструкции в /usr/lib/ и /usr/lib/pkcs11-gost/ , ваш конфиг в /etc/ssl/

Токен видится, форматируется через pkcs15-init, Openssl алгоритм из конфига подхватывает:

$ openssl ciphers -v | grep GOST
GOST2001-GOST89-GOST89  SSLv3 Kx=unknown  Au=unknown Enc=unknown   Mac=unknown

сертификаты вроде бы нормально создаются и подписываются.

Проблема:
После выхода из сессии gnome отказывается стартовать, то есть дальше загрузочного экрана gdm3 дело не идёт. С openssl.cnf который был в пакете по умолчанию или вообще без него загрузка проходит нормально, а с вашим конфигом - вылетает. При этом .xsession-errors явно ругается на openssl:

/etc/gdm3/Xsession: Beginning session setup...
bind failed
Auto configuration failed
3817:error:260B606D:engine routines:DYNAMIC_LOAD:init failed:eng_dyn.c:521:
3817:error:260BC065:engine routines:INT_ENGINE_CONFIGURE:engine configuration error:eng_cnf.c:204:section=pkcs11_section, name=dynamic_path, value=/usr/lib/pkcs11-gost/libpkcs11_gost.so
3817:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:conf_mod.c:235:module=engines, value=engine_section, retcode=-1      

На всякий случай обновил openssl из sid - получил версию 1.0.1e-2, ошибка та же самая.

Пытался искать причины ошибки - в основном ссылаются на некую удалённую страницу с сайта opensc, плюс пишут что эта проблема возникает когда openssl пытается дважды загрузить конфиг.

Пожалуйста, подскажите хотя бы в какую сторону искать. С openssl я раньше не работал, поэтому слабо представляю себе в чём может быть проблема.

Re: Поддержка Рутокен ЭЦП в OpenSSL

Добрый день.

Помогите, пожалуйста, разобраться в ситуации.

Выполняю команду генерацию ключа
openssl genpkey -engine pkcs11_gost -algorithm GOST2001 -pkeyopt slot_key_id:100 -pkeyopt paramset:A -pkeyopt pin:12345678
на токене появляется два объекта - private key и public key

создаю сертификат
openssl req -engine pkcs11_gost -x509 -new -key 100 -keyform engine -out ca.crt

Но значения public key ca.crt и public key на токене разные. Я что-то делаю неправильно?

ОС: Ubuntu 12.04
настройка проводилась по инструкции https://forum.rutoken.ru/topic/1639/

Re: Поддержка Рутокен ЭЦП в OpenSSL

В сертификате открытый ключ уложен по-другому

Re: Поддержка Рутокен ЭЦП в OpenSSL

ArPod пишет:

День добрый.

Пытаюсь прикрутить поддержку ГОСТ/OpenSSL к Debian Squeeze x64. Пока, к сожалению, безуспешно.

Что сделано:
Поставил обновлённые пакеты из Wheezy (дополнительных зависимостей они с собой практически не потянули)

$ apt-show-versions openssl opensc pcscd libtool libccid libpcsclite1
libccid 1.4.7-1 newer than version in archive
libpcsclite1 1.8.4-1 newer than version in archive
libtool 2.4.2-1.1 newer than version in archive
opensc 0.12.2-3 newer than version in archive
openssl 1.0.1e-1 newer than version in archive
pcscd 1.8.4-1 newer than version in archive

Скачал архив с http://ubuntuone.com/2vPRtZZA1jSHRilHa292xd , библиотеки положил по инструкции в /usr/lib/ и /usr/lib/pkcs11-gost/ , ваш конфиг в /etc/ssl/

Токен видится, форматируется через pkcs15-init, Openssl алгоритм из конфига подхватывает:

$ openssl ciphers -v | grep GOST
GOST2001-GOST89-GOST89  SSLv3 Kx=unknown  Au=unknown Enc=unknown   Mac=unknown

сертификаты вроде бы нормально создаются и подписываются.

Проблема:
После выхода из сессии gnome отказывается стартовать, то есть дальше загрузочного экрана gdm3 дело не идёт. С openssl.cnf который был в пакете по умолчанию или вообще без него загрузка проходит нормально, а с вашим конфигом - вылетает. При этом .xsession-errors явно ругается на openssl:

/etc/gdm3/Xsession: Beginning session setup...
bind failed
Auto configuration failed
3817:error:260B606D:engine routines:DYNAMIC_LOAD:init failed:eng_dyn.c:521:
3817:error:260BC065:engine routines:INT_ENGINE_CONFIGURE:engine configuration error:eng_cnf.c:204:section=pkcs11_section, name=dynamic_path, value=/usr/lib/pkcs11-gost/libpkcs11_gost.so
3817:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:conf_mod.c:235:module=engines, value=engine_section, retcode=-1      

На всякий случай обновил openssl из sid - получил версию 1.0.1e-2, ошибка та же самая.

Пытался искать причины ошибки - в основном ссылаются на некую удалённую страницу с сайта opensc, плюс пишут что эта проблема возникает когда openssl пытается дважды загрузить конфиг.

Пожалуйста, подскажите хотя бы в какую сторону искать. С openssl я раньше не работал, поэтому слабо представляю себе в чём может быть проблема.

Нюнасов 2. Форматировать токен нужно не утилитами opensc, а нашей панелью управления. Наш конфиг - урезанный. Вам имеет смысл использовать умолчательный конфиг (который идет с openssl), а для работы с нашим engine - наш конфиг.

Re: Поддержка Рутокен ЭЦП в OpenSSL

Виктор Ткаченко пишет:

В сертификате открытый ключ уложен по-другому

Спасибо за быстрый ответ!

Подскажите тогда такую вещь, правильно ли я импортирую сертификат на токен?
pkcs11-tool --module=/usr/lib/pkcs11-gost/librtpkcs11ecp.so --write-object test.der --type cert --login --id 100 --label "testcertforlogin"

Сомнения возникли из-за того, что при настройке PAM-аутентификации в pam_p11
authkey = PKCS11_find_key(authcert);
не находит private ключа для сертификата.

Re: Поддержка Рутокен ЭЦП в OpenSSL

вообще говоря и не обязан. Потому что сертификат гостовый. Какую версию libp11 вы используете c PAM-ом? И что у вас за проет, если не секрет?