logo
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline colotiline  
#1 Оставлено : 12 сентября 2018 г. 12:23:22(UTC)
colotiline

Статус: Участник

Группы: Участники
Зарегистрирован: 12.09.2018(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 4 раз
Здравствуйте.

Установил CryptoPro CSP 4R3 в CentOS 7.

Есть задача проверить CMS на валидность, по сути сделать в UNIX среде аналог кода с Windows (здесь идёт обёртка над CAPICOM):
Код:

var signedData = new SignedDataClass
{
	Content = message
};
signedData.Verify(signature, true, CAPICOM_SIGNED_DATA_VERIFY_FLAG.CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE);
if (signedData.Signers.Count != 1)
{
	throw new Exception();
}

if (signedData.Certificates.Count != 1)
{
	throw new Exception();
}


Пытаюсь работать с
Код:

./cryptcp -verify


Но пока ничего выходит.

Сохранял в текстовый документ (расширение .txt), а также через SignedCms декодировал в байты и сохранял в бинарный (расширение .bin).

Выполнима ли задача под UNIX?
В какую сторону смотреть?
Может есть примеры кода?

SignedCms к сожалению не умеет работать с ГОСТ хешированием (по крайней мере пока https://github.com/dotnet/corefx/issues/29461).
Offline colotiline  
#2 Оставлено : 12 сентября 2018 г. 15:09:38(UTC)
colotiline

Статус: Участник

Группы: Участники
Зарегистрирован: 12.09.2018(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 4 раз
Добрался до
Код:

openssl smime -verify -inform DER -in /home/tests/cms.bin -content /home/tests/content.txt, где /home/tests/cms.bin

Но на CentOS пока не могу заставить работать трюк из https://dunmaksim.blogsp.../09/debian-openssl.html.
Online Aleksandr G*  
#3 Оставлено : 13 сентября 2018 г. 6:27:20(UTC)
Aleksandr G*

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 43

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 8 раз в 8 постах
А если это https://www.cryptopro.ru...ts&m=55563#post55563 попробовать?
Offline colotiline  
#4 Оставлено : 13 сентября 2018 г. 7:45:20(UTC)
colotiline

Статус: Участник

Группы: Участники
Зарегистрирован: 12.09.2018(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 4 раз
Спасибо. Вроде похожая инструкция. Смотрю.

Сейчас шаги следующие:
* Всё крутится под докером.
* Ставлю CentOS 7 https://hub.docker.com/_/centos/.
* В неё копирую дистрибутив linux-ia32.

Ставлю и настраиваю КриптоПро.

Код:

yum install lsb -y
yum install lsb-core-ia32 -y
rpm -i 
rpm -i lsb-cprocsp-base-4.0.9944-5.noarch.rpm # Здесь получаю Failed to get D-Bus connection: Operation not permitted, но установка выполнена.
rpm -i lsb-cprocsp-rdr-4.0.9944-5.i686.rpm
rpm -i lsb-cprocsp-kc1-4.0.9944-5.i686.rpm
rpm -i lsb-cprocsp-capilite-4.0.9944-5.i686.rpm
rpm -i cprocsp-cpopenssl-gost-4.0.9944-5.i686.rpm # Warning, /var/opt/cprocsp/cp-openssl/openssl.cnf doesn't exist
openssl version # OpenSSL 1.0.2k-fips  26 Jan 2017
nano /etc/pki/tls/openssl.cnf


Здесь вставляю по инструкции после oid_section = new_oids нижеследующее.
Код:

# Enable GOST
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gost_capi = gost_section

[gost_section]
engine_id = gost_capi
dynamic_path = /opt/cprocsp/cp-openssl/lib/ia32/engines/libgost_capi.so
default_algorithms = ALL


Сохраняю. Вызываю openssl engine, получаю ошибку.
Код:

Error configuring OpenSSL
140420890208144:error:25066067:DSO support routines:DLFCN_LOAD:could not load the shared library:dso_dlfcn.c:187:filename(/opt/cprocsp/cp-openssl/lib/ia32/engines/libgost_capi.so): /opt/cprocsp/cp-openssl/lib/ia32/engines/libgost_capi.so: wrong ELF class: ELFCLASS32
140420890208144:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:233:
140420890208144:error:260B6084:engine routines:DYNAMIC_LOAD:dso not found:eng_dyn.c:467:
140420890208144:error:260BC066:engine routines:INT_ENGINE_CONFIGURE:engine configuration error:eng_cnf.c:191:section=gost_section, name=dynamic_path, value=/opt/cprocsp/cp-openssl/lib/ia32/engines/libgost_capi.so
140420890208144:error:0E07606D:configuration file routines:MODULE_RUN:module initialization error:conf_mod.c:225:module=engines, value=engine_section, retcode=-1


Сейчас разбираюсь, какие библиотеки и почему он не может загрузить.
Online Aleksandr G*  
#5 Оставлено : 13 сентября 2018 г. 7:50:02(UTC)
Aleksandr G*

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 43

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 8 раз в 8 постах
Цитата:
wrong ELF class: ELFCLASS32

вероятно ошиблись в архитектуре
thanks 1 пользователь поблагодарил Aleksandr G* за этот пост.
colotiline оставлено 13.09.2018(UTC)
Online Aleksandr G*  
#6 Оставлено : 13 сентября 2018 г. 7:53:30(UTC)
Aleksandr G*

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 43

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 8 раз в 8 постах
Ну и раз используете Docker, то может пригодится:
https://github.com/rnixik/docker-openssl-gost
https://github.com/taigasys/CryptoProCSP
Offline colotiline  
#7 Оставлено : 13 сентября 2018 г. 11:43:09(UTC)
colotiline

Статус: Участник

Группы: Участники
Зарегистрирован: 12.09.2018(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 4 раз
Всё верно, спасибо. Использовал некорректную архитектуру.

Не могу использовать образы не из официальных источников.

Итог - CMS проверяется, всё работает. Буду уже тестить подробнее.

Шаги (всё под докером).

* Ставлю CentOS (https://hub.docker.com/_/centos/).
* Качаю linux-amd64.tgz.
* Копирую в докер `docker cp C:\Users\username\Downloads\linux-amd64.tgz centos:/home/`.
* Подключаюсь к докеру `docker attach centos`.

Код:

yum install openssl -y
yum install lsb-core-amd64 -y

cd /home
tar -xvzf ./linux-amd64.tgz -C /home
cd linux-amd64

rpm -i lsb-cprocsp-base-4.0.9944-5.noarch.rpm
rpm -i lsb-cprocsp-rdr-64-4.0.9944-5.x86_64.rpm
rpm -i lsb-cprocsp-kc1-64-4.0.9944-5.x86_64.rpm
rpm -i lsb-cprocsp-capilite-64-4.0.9944-5.x86_64.rpm
rpm -i cprocsp-cpopenssl-gost-64-4.0.9944-5.x86_64.rpm

yum install nano -y
nano /etc/pki/tls/openssl.cnf


Пишу в openssl.cnf
Код:

# GOST
openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
gost_capi = gost_section

[gost_section]
engine_id = gost_capi
dynamic_path = /opt/cprocsp/cp-openssl/lib/amd64/engines/libgost_capi.so
default_algorithms = ALL


Линкую libcrypto.
Код:

ln -s /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so.1.0.0
/sbin/ldconfig /usr/lib64


Проверяю и радуюсь Verification successfull.
Код:

openssl smime -verify -noverify -inform DER -in /home/cms.bin -content /home/message.txt


Спасибо ещё раз.

Если можно, киньте ссылкой на список возможных ошибок. Но это уже оффтоп. :)
Offline colotiline  
#8 Оставлено : 13 сентября 2018 г. 14:36:03(UTC)
colotiline

Статус: Участник

Группы: Участники
Зарегистрирован: 12.09.2018(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 4 раз
Последние штрихи.

Ставим нужные корневые сертификаты (копируем .cer в докер и конвертим в pem).
Код:

openssl x509 -inform DER -in "/home/certnew.cer" -out crypto-cert.pem
cp /home/crypto-cert.pem /etc/pki/ca-trust/source/anchors/crypto-cert.pem


Обновляем корневые сертификаты.
Код:

update-ca-trust


Валидируем уже не только подпись, но и сам сертификат (нет параметра -noverify).
Код:

openssl smime -verify -inform DER -in /home/cms.bin -content /home/message.txt

Отредактировано пользователем 13 сентября 2018 г. 14:44:50(UTC)  | Причина: Не указана

Online Aleksandr G*  
#9 Оставлено : 13 сентября 2018 г. 14:56:46(UTC)
Aleksandr G*

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 43

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 8 раз в 8 постах
А если корневые и СОС упаковать в бандл и при проверке указать -CAfile bundle.pem (ну и про -crl_check, -crl_check_all не забыть)?
thanks 1 пользователь поблагодарил Aleksandr G* за этот пост.
colotiline оставлено 13.09.2018(UTC)
Offline colotiline  
#10 Оставлено : 13 сентября 2018 г. 15:47:14(UTC)
colotiline

Статус: Участник

Группы: Участники
Зарегистрирован: 12.09.2018(UTC)
Сообщений: 11

Сказал(а) «Спасибо»: 4 раз
То всё становится ещё лучше. Спасибо!

За CRL и цепочками придётся самостоятельно следить (обновлять, поддерживать) в случае openssl и ГОСТ?

Для возможно зашедших.

Как скомбинировать.
Код:

cat certnew.pem certnewchain.pem certcrl.pem > cert.pem


Как проверить.
Код:

openssl smime -verify -crl_check -crl_check_all -CAfile /home/certs-combine/cert.pem -inform DER -in /home/cms.bin -content /home/message.txt

Отредактировано пользователем 13 сентября 2018 г. 15:51:54(UTC)  | Причина: Не указана

Online Aleksandr G*  
#11 Оставлено : 14 сентября 2018 г. 11:42:14(UTC)
Aleksandr G*

Статус: Активный участник

Группы: Участники
Зарегистрирован: 13.09.2016(UTC)
Сообщений: 43

Сказал(а) «Спасибо»: 6 раз
Поблагодарили: 8 раз в 8 постах
Цитата:
За CRL и цепочками придётся самостоятельно следить (обновлять, поддерживать) в случае openssl и ГОСТ?


Вопросы по gost_capi/gostengy лучше продублировать в соответствующей ветке: https://www.cryptopro.ru....aspx?g=posts&t=8544

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.