Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 6 раз
|
Здравствуйте. Установил 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();
}
Пытаюсь работать с Но пока ничего выходит. Сохранял в текстовый документ (расширение .txt), а также через SignedCms декодировал в байты и сохранял в бинарный (расширение .bin). Выполнима ли задача под UNIX? В какую сторону смотреть? Может есть примеры кода? SignedCms к сожалению не умеет работать с ГОСТ хешированием (по крайней мере пока https://github.com/dotnet/corefx/issues/29461).
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 6 раз
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.09.2016(UTC) Сообщений: 126
Сказал(а) «Спасибо»: 8 раз Поблагодарили: 35 раз в 28 постах
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 6 раз
|
Спасибо. Вроде похожая инструкция. Смотрю. Сейчас шаги следующие: * Всё крутится под докером. * Ставлю 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
Сейчас разбираюсь, какие библиотеки и почему он не может загрузить.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.09.2016(UTC) Сообщений: 126
Сказал(а) «Спасибо»: 8 раз Поблагодарили: 35 раз в 28 постах
|
Цитата:wrong ELF class: ELFCLASS32 вероятно ошиблись в архитектуре
|
1 пользователь поблагодарил Aleksandr G* за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.09.2016(UTC) Сообщений: 126
Сказал(а) «Спасибо»: 8 раз Поблагодарили: 35 раз в 28 постах
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 6 раз
|
Всё верно, спасибо. Использовал некорректную архитектуру. Не могу использовать образы не из официальных источников. Итог - 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
Спасибо ещё раз. Если можно, киньте ссылкой на список возможных ошибок. Но это уже оффтоп. :)
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 6 раз
|
Последние штрихи. Ставим нужные корневые сертификаты (копируем .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
Обновляем корневые сертификаты. Валидируем уже не только подпись, но и сам сертификат (нет параметра -noverify). Код:
openssl smime -verify -inform DER -in /home/cms.bin -content /home/message.txt
Отредактировано пользователем 13 сентября 2018 г. 17:44:50(UTC)
| Причина: Не указана
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 13.09.2016(UTC) Сообщений: 126
Сказал(а) «Спасибо»: 8 раз Поблагодарили: 35 раз в 28 постах
|
А если корневые и СОС упаковать в бандл и при проверке указать -CAfile bundle.pem (ну и про -crl_check, -crl_check_all не забыть)?
|
1 пользователь поблагодарил Aleksandr G* за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 12.09.2018(UTC) Сообщений: 16
Сказал(а) «Спасибо»: 6 раз
|
То всё становится ещё лучше. Спасибо! За 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 г. 18:51:54(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close