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

Уведомление

Icon
Error

23 Страницы«<212223
Опции
К последнему сообщению К первому непрочитанному
Offline colotiline  
#441 Оставлено : 20 сентября 2018 г. 8:54:19(UTC)
colotiline

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

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

Сказал(а) «Спасибо»: 5 раз
Подскажите, пожалуйста, где взять список возможных ответов для команды ниже?
Код:

openssl smime -verify -crl_check -inform DER -in /home/cms.bin -content /home/message.txt -CAfile /etc/pki/ca-trust/source/anchors/crypto-cert-combine.pem


Что есть успех понятно. Но среди неуспеха нужно выделять:

  • Невозможно проверить подпись этим сертификатом.
  • Подпись валидная, но сертификат устарел.
  • Подпись валидная, но сертификат не начал действовать (такое возможно?).
  • Подпись валидная, но СОС устарел.
Offline two_oceans  
#442 Оставлено : 20 сентября 2018 г. 9:26:41(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 138
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 33 раз в 33 постах
Цитата:
В bash (и вроде бы в других оболочках в Linux) отлично работают одинарные кавычки, с ними дополнительное экранирование не требуется
bash это конечно замечательно, но c openssl не так все прозрачно. Буквально на предыдущей странице gostengy не загружалась в openssl из-за неэкранированных \ в пути в файле конфигурации! Раз ни одно из значений не срабатывает, то это наводит на мысль о неверной подготовке openssl значения, передаваемого в gostengy и надо эту подготовку как-то нивелировать, чтобы в gostengy поступило верное значение. Возможно и одинарные кавычки использовать и \ проэкранировать.
Цитата:
Подпись валидная, но сертификат не начал действовать (такое возможно?).
Возможно, если на компьютере, где производится проверка, выставлено время далеко в прошлое, а в подписи не указано время подписания. Другой вариант, если время верное, подписано и проверено в день получения сертификата, но в другом часовом поясе - при этом тоже могут быть странные эффекты. Есть и другие ситуации, связанные с особенностями отсчета времени - например, секунд в минуте не всегда 60, иногда раз в полугодие 1 секунду добавляют или убирают чтобы компенсировать неравномерность движения Земли, но вероятность попасть на такую ситуацию ничтожно мала. Кроме того, у УЦ есть опция выпускать сертификаты с датой начала в будущем, но таким сертификатом будет нельзя подписать до наступления этой даты. То есть если такой сертификат использовать для подписи на компьютере с отведенной датой в будущее, то при проверке на компьютере с верной датой также возможно выявление ошибки "сертификат не начал действовать". Собственно, выявлять такую ситуацию и не нужно - просто проверить регулярно правильность установки времени на своем куомпьютере и возвращать на повторную подпись.
Цитата:
Невозможно проверить подпись этим сертификатом.
Такую ситуацию почти невозможно отличить от измененной подписи, если алгоритм сертификата подходит для алгоритма подписи. Из остальных ошибок пожалуй имеет значение устаревший CRL, это тоже можно решить регулярными обновлениями, например раз в сутки.

Отредактировано пользователем 20 сентября 2018 г. 9:37:11(UTC)  | Причина: дополнено

thanks 1 пользователь поблагодарил two_oceans за этот пост.
colotiline оставлено 20.09.2018(UTC)
Offline colotiline  
#443 Оставлено : 20 сентября 2018 г. 9:32:57(UTC)
colotiline

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: colotiline Перейти к цитате
Подскажите, пожалуйста, где взять список возможных ответов для команды ниже?
Код:

openssl smime -verify -crl_check -inform DER -in /home/cms.bin -content /home/message.txt -CAfile /etc/pki/ca-trust/source/anchors/crypto-cert-combine.pem


Что есть успех понятно. Но среди неуспеха нужно выделять:

  • Невозможно проверить подпись этим сертификатом.
  • Подпись валидная, но сертификат устарел.
  • Подпись валидная, но сертификат не начал действовать (такое возможно?).
  • Подпись валидная, но СОС устарел.


Невозможно проверить подпись этим сертификатом
Verification failure
139793328756624:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:pk7_smime.c:336:Verify error:unable to get local issuer certificate

Подпись валидная, но сертификат устарел
?

Подпись валидная, но сертификат не начал действовать
?

Подпись валидная, но СОС устарел
Verification failure
140363354548112:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:pk7_smime.c:336:Verify error:CRL has expired
Offline colotiline  
#444 Оставлено : 20 сентября 2018 г. 9:35:44(UTC)
colotiline

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: two_oceans Перейти к цитате
Цитата:
В bash (и вроде бы в других оболочках в Linux) отлично работают одинарные кавычки, с ними дополнительное экранирование не требуется
bash это конечно замечательно, но c openssl не так все прозрачно. Буквально на предыдущей странице gostengy не загружалась в openssl из-за неэкранированных \ в пути в файле конфигурации! Раз ни одно из значений не срабатывает, то это наводит на мысль о неверной подготовке openssl значения, передаваемого в gostengy и надо эту подготовку как-то нивелировать, чтобы в gostengy поступило верное значение. Возможно и одинарные кавычки использовать и \ проэкранировать.
Цитата:
Подпись валидная, но сертификат не начал действовать (такое возможно?).
Возможно, если на компьютере, где производится проверка, выставлено время далеко в прошлое, а в подписи не указано время подписания. Другой вариант, если время верное, подписано и проверено в день получения сертификата, но в другом часовом поясе - при этом тоже могут быть странные эффекты. Есть и другие ситуации, связанные с особенностями отсчета времени - например, секунд в минуте не всегда 60, иногда раз в полугодие 1 секунду добавляют или убирают чтобы компенсировать неравномерность движения Земли, но вероятность попасть на такую ситуацию ничтожно мала. Кроме того, у УЦ есть опция выпускать сертификаты с датой начала в будущем, но таким сертификатом будет нельзя подписать до наступления этой даты. То есть если такой сертификат использовать для подписи на компьютере с отведенной датой в будущее, то при проверке на компьютере с верной датой также возможно выявление ошибки "сертификат не начал действовать".


Мне бы сообщение от OpenSSL получить, чтобы его потом скармливать валидатору и понимать, что делать с такой подписью. Пока не могу этого сделать, так как openssl в докере, в нём время нельзя менять, а на хосте нет прав на изменение времени. В целом, если никто не ответит, разберусь позже дома.

За описание ситуаций по "не начал действовать" большое спасибо. :)
Offline dmitryp  
#445 Оставлено : 20 сентября 2018 г. 10:55:25(UTC)
dmitryp

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

Группы: Участники
Зарегистрирован: 11.07.2017(UTC)
Сообщений: 15
Российская Федерация

Автор: two_oceans Перейти к цитате
Цитата:
В bash (и вроде бы в других оболочках в Linux) отлично работают одинарные кавычки, с ними дополнительное экранирование не требуется
bash это конечно замечательно, но c openssl не так все прозрачно. Буквально на предыдущей странице gostengy не загружалась в openssl из-за неэкранированных \ в пути в файле конфигурации! Раз ни одно из значений не срабатывает, то это наводит на мысль о неверной подготовке openssl значения, передаваемого в gostengy и надо эту подготовку как-то нивелировать, чтобы в gostengy поступило верное значение. Возможно и одинарные кавычки использовать и \ проэкранировать.


Вот воспроизводимый тест-кейс: https://gist.github.com/...e77b9b968267bd3c355baa8f . Скриптом создаю контейнер "foo" (CN=bar), и прогоняю варианты с/без экранированием обратного слеша, двоеточия, пробелов, с/без одинарными кавычками, с/без префиксом "c:", со всеми формами во всех комбинациях. Из порядка 500 полученных вариантов ни один не сработал.

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

Offline Дмитрий Пичулин  
#446 Оставлено : 20 сентября 2018 г. 11:55:17(UTC)
Дмитрий Пичулин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC)
Сообщений: 673
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 17 раз
Поблагодарили: 98 раз в 83 постах
Автор: dmitryp Перейти к цитате
Попробовал (безрезультатно) следующие варианты:

В логе OpenSSL должна быть соответствующая ошибка со словами "gng_support_getuserkey", если её нет, то что-то идёт не так и до вызова нашей функции просто не доходит.

Знания в базе знаний, поддержка в техподдержке
Offline dmitryp  
#447 Оставлено : 21 сентября 2018 г. 2:48:34(UTC)
dmitryp

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

Группы: Участники
Зарегистрирован: 11.07.2017(UTC)
Сообщений: 15
Российская Федерация

Автор: Дмитрий Пичулин Перейти к цитате
Автор: dmitryp Перейти к цитате
Попробовал (безрезультатно) следующие варианты:

В логе OpenSSL должна быть соответствующая ошибка со словами "gng_support_getuserkey", если её нет, то что-то идёт не так и до вызова нашей функции просто не доходит.



Такой ошибки там нет:
Код:
engine "gostengy" set.
cannot load signing key file from engine
139983316783296:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:crypto/engine/eng_pkey.c:78:
unable to load signing key file
Offline Дмитрий Пичулин  
#448 Оставлено : 21 сентября 2018 г. 5:50:27(UTC)
Дмитрий Пичулин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 16.09.2010(UTC)
Сообщений: 673
Откуда: КРИПТО-ПРО

Сказал(а) «Спасибо»: 17 раз
Поблагодарили: 98 раз в 83 постах
Автор: dmitryp Перейти к цитате
Автор: Дмитрий Пичулин Перейти к цитате
Автор: dmitryp Перейти к цитате
Попробовал (безрезультатно) следующие варианты:

В логе OpenSSL должна быть соответствующая ошибка со словами "gng_support_getuserkey", если её нет, то что-то идёт не так и до вызова нашей функции просто не доходит.



Такой ошибки там нет:
Код:
engine "gostengy" set.
cannot load signing key file from engine
139983316783296:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:crypto/engine/eng_pkey.c:78:
unable to load signing key file

Да, в логе не видно нашего вызова, значит ошибка до него. Проверим, изучим.

Знания в базе знаний, поддержка в техподдержке
Offline two_oceans  
#449 Оставлено : 21 сентября 2018 г. 7:19:54(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 138
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 33 раз в 33 постах
Цитата:
В логе OpenSSL должна быть соответствующая ошибка со словами "gng_support_getuserkey", если её нет, то что-то идёт не так и до вызова нашей функции просто не доходит.
Как я понимаю был процитирован вывод на консоль... а где смотреть лог openssl если понадобится не подскажете? Наверно его надо как-то включить? попробовал искать в интернете, но все выдачи поиска забиты пересказами как установить openssl и как сгенерировать самоподписанный сертификат.
Offline VictorFrom  
#450 Оставлено : 21 сентября 2018 г. 13:27:41(UTC)
VictorFrom

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

Группы: Участники
Зарегистрирован: 13.09.2018(UTC)
Сообщений: 31
Российская Федерация

Сказал(а) «Спасибо»: 7 раз
Прошу прощения, что я влезаю в эту напряженную дискуссию, но хочется окончательно удостовериться.

Правильно ли я понимаю, что несмотря на то, что используется openssl, все равно она работает с CryptoproCSP
и для работы по ГОСТ 2012 нужно его устанавливать (CryptoproCSP). И нет никакой реализации ГОСТ в openssl,
которая бы работала без CryptoproCSP.

Тогда в чем должен быть выигыш от использования openssl в командной строке, если есть родная утилита cryptcp,
которая может тоже выполнять подпись и шифрование? А для работы с сертификатами - certmgr.

Offline Ефремов Степан  
#451 Оставлено : 21 сентября 2018 г. 14:59:58(UTC)
Ефремов Степан

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 31.08.2017(UTC)
Сообщений: 5
Российская Федерация

Автор: dmitryp Перейти к цитате
Автор: Дмитрий Пичулин Перейти к цитате
Автор: dmitryp Перейти к цитате
Попробовал (безрезультатно) следующие варианты:

В логе OpenSSL должна быть соответствующая ошибка со словами "gng_support_getuserkey", если её нет, то что-то идёт не так и до вызова нашей функции просто не доходит.



Такой ошибки там нет:
Код:
engine "gostengy" set.
cannot load signing key file from engine
139983316783296:error:26096080:engine routines:ENGINE_load_private_key:failed loading private key:crypto/engine/eng_pkey.c:78:
unable to load signing key file



Openssl-1.1.0 c указанием имени контейнера в "-inkey" работает:

- Ubuntu 16.04
- CSP (Type:80) 4.0.9944 (Xenocrates) KC2
- Пакеты cprocsp-cpopenssl-110-* 5.0 (https://update.cryptopro.ru/support/nginx-gost/bin/archives/173647/)
(gostengy) CryptoPro GostEngy ($Revision: 168568 $)


Генерация сертификата с ключами:
Код:
/opt/cprocsp/bin/amd64/cryptcp -creatcert -provtype 80 -rdn "CN=t2012" -cont "\\\\.\\HDIMAGE\\t2012cont" -certusage 1.3.6.1.5.5.7.3.1 -ku -du -ex -ca http://cryptopro.ru/certsrv

CryptCP 4.0 (c) "Crypto-Pro", 2002-2017.
Command prompt Utility for file signature and encryption.
Creating request...
CryptoPro CSP: Set password on produced container "t2012cont".
Password:
Retype password:
Sending request to CA...
Installing certificate...
Certificate is installed.
[ReturnCode: 0]



Экспорт сертификата:
Код:
/opt/cprocsp/bin/amd64/certmgr -export -dn CN=t2012 -dest ./t2012.der
Certmgr 1.1 (c) "CryptoPro",  2007-2010.
program for managing certificates, CRLs and stores

Exporting: 
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : CN=t2012
Serial              : 0x12002D595C78349DA70081580A0000002D595C
SHA1 Hash           : a0138e8cb88d522943bb4e0a7310b57f7e522a1e
SubjKeyID           : d9f85a8042a5d0d972883393612a26147e626178
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before    : 21/09/2018  14:16:38 UTC
Not valid after     : 21/12/2018  14:26:38 UTC
PrivateKey Link     : Yes                 
Container           : HDIMAGE\\t2012con.000\DA37
Provider Name       : Crypto-Pro GOST R 34.10-2012 KC2 CSP
Provider Info       : ProvType: 80, KeySpec: 2, Flags: 0x0
CA cert URL         : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.1
=============================================================================
Export complete

[ErrorCode: 0x00000000]



Конвертация в PEM(base64):
Код:
/opt/cprocsp/cp-openssl-1.1.0/bin/amd64/openssl x509 -in ./t2012.der -inform DER -out ./t2012.pem -outform PEM



Подпись:
Код:
/opt/cprocsp/cp-openssl-1.1.0/bin/amd64/openssl cms -sign -engine gostengy -keyform ENGINE -inkey c:t2012cont -in for_sign.txt -binary -out content.sign -outform DER -signer ./t2012.pem

engine "gostengy" set.



Подпись (2 вариант):
Код:
/opt/cprocsp/cp-openssl-1.1.0/bin/amd64/openssl cms -sign -engine gostengy -keyform ENGINE -inkey c:"\\\\.\\HDIMAGE\\t2012cont" -in for_sign.txt -binary -out content.sign -outform PEM -signer ./t2012.pem

engine "gostengy" set.

Техническая поддержка здесь.
База знаний здесь.
Offline two_oceans  
#452 Оставлено : 24 сентября 2018 г. 3:16:47(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 138
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 33 раз в 33 постах
Автор: VictorFrom Перейти к цитате
Правильно ли я понимаю, что несмотря на то, что используется openssl, все равно она работает с Cryptopro CSP и для работы по ГОСТ 2012 нужно его устанавливать (Cryptopro CSP). И нет никакой реализации ГОСТ в openssl, которая бы работала без Cryptopro CSP.
Модули gost_capi и gostengy работают только с КриптоПро CSP, все верно. В чистой openssl с некоторого момента нет реализации ГОСТ, старый код в openssl 1.0 не поддерживает гост-2012 и изменения структуры openssl, его исключили, все верно. Есть другой отечественный криптопровайдер сертифицировавший ветку openssl с реализацией ГОСТ. Такая версия работает без КриптоПро, но платная.
Автор: VictorFrom Перейти к цитате
Тогда в чем должен быть выигыш от использования openssl в командной строке, если есть родная утилита cryptcp, которая может тоже выполнять подпись и шифрование? А для работы с сертификатами - certmgr.
Вот у меня почти всегда всегда возникает этот же вопрос. На текущий момент выигрыш в основном для кроссплатформанных приложений изначально построенных на библиотеках openssl (которых тьма), а также для создания внутреннего неаккредитованного УЦ предприятия.

Offline dmitryp  
#453 Оставлено : 25 сентября 2018 г. 8:06:41(UTC)
dmitryp

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

Группы: Участники
Зарегистрирован: 11.07.2017(UTC)
Сообщений: 15
Российская Федерация

Автор: Ефремов Степан Перейти к цитате
Openssl-1.1.0 c указанием имени контейнера в "-inkey" работает:


Огромное спасибо, с помощью вашего примера смог нащупать решение. Дело было в старой версии библиотеки cprocsp-cpopenssl-110-*. При переходе на 5.0 (https://update.cryptopro.ru/support/nginx-gost/bin/180423/) контейнер действительно корректно обнаруживается. Приведённый выше скрипт корректно находит контейнер по разным вариантам наименования (от дружественного до полного) - и, кстати, дополнительное экранирование не потребовалось (по крайней мере для простого имени контейнера). В общем, буду полагаться на то что от различия версий openssl-модуля (5.0) и самой CSP (4.0) ничего сломаться не должно.

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