Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline UncleVic  
#1 Оставлено : 1 апреля 2025 г. 21:22:31(UTC)
UncleVic

Статус: Новичок

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

Сразу скажу, что я полный новичок в использовании КриптоПРО. Пытался читать документацию, но как-то не нашел простейшей инструкции на тему "что бы подписать файл выполните шаги 1. 2. 3.". Вся документация, на мой взгляд, написана для людей уже что-то понимающих в этой теме.
Мне достался проект на Golang. Он использует библиотеку КриптоПРО для генерации подписи для документов EDI (электронный документооборот).
Т.к. официальной библиотеки для Go нет, данный проект использует CGO. Как бы все хорошо, но у данного сервиса "течет" память (явно не в чистом гошном коде) и дебажить проект с CGO достаточно проблематично (гошники знают).
Поэтому возникла идея просто вызывать консольные утилиты и в результате получить приложение на чистом Go и использовать готовое ПО от КриптоПРО, а не городить свою библиотеку с сишными вызовами.

Я почитал форум, но у меня остались вопросы и некоторые вещи просто не получились.
На сколько я понял для генерации подписи, я должен использовать утилиту cryptcp -signf ...
Но перед этим я должен установить сертификаты с помощью certmgr -export ...
Все верно? Имеет значение в какой стор их устанавливать?

В файле docker, который собирает это приложение есть установка сертификатов
Код:

certmgr -install -store mRoot -file ./cert/root.p7b -all && \
certmgr -install -store mRoot -file ./cert/rootca.cer && \
certmgr -install -store mCa -file ./cert/subca.cer && \
certmgr -install -store mAddressBook -file ./cert/opertsp.cer && \
update-ca-certificates


Пробуя получить подпись вручную, я устанавливал эти сертификаты, там вот эти издатели

1-------
Issuer : ИНН ЮЛ=7717107991, E=info@cryptopro.ru, ОГРН=1037700085444, C=RU, S=77 Москва, L=Москва, STREET=ул. Сущёвский вал д. 18, O="ООО ""КРИПТО-ПРО""", CN="Тестовый подчиненный УЦ ООО ""КРИПТО-ПРО"" ГОСТ 2012 (УЦ 2.0)"
2-------
Issuer : C=RU, ИНН ЮЛ=7717107991, E=info@cryptopro.ru, ОГРН=1037700085444, S=77 Москва, L=Москва, STREET=ул. Сущёвский вал д. 18, O="ООО ""КРИПТО-ПРО""", CN="Тестовый головной УЦ ООО ""КРИПТО-ПРО"" ГОСТ 2012 (УЦ 2.0)"
3-------
Issuer : C=RU, ИНН ЮЛ=7717107991, E=info@cryptopro.ru, ОГРН=1037700085444, S=77 Москва, L=Москва, STREET=ул. Сущёвский вал д. 18, O="ООО ""КРИПТО-ПРО""", CN="Тестовый головной УЦ ООО ""КРИПТО-ПРО"" ГОСТ 2012 (УЦ 2.0)"
4-------
Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2

Подписать с их помощью нельзя, cryptcp говорит, что отсутствует приватный ключ.

Внутри в коде для подписи используется вызов функции и в параметрах нет передачи какого-то дополнительного сертификата. Все параметры числовые (за исключением pin).
Код:

C.CadesSign(signType, store, thumbprint, pData, cDataLen, tspServer, pin, &blob)


Какого-то другого сертификата, который бы использовался для подписи, я найти не смог.

Не сочтите за труд, помогите разобраться как с помощью консольных утилит подписать файл (получить строку подписи). Поиском по форуму я готового рецепта не нашел. Все начинают что-то делать, где-то получается, где-то появляются ошибки, но оформленного решения не увидел. Может потому, что четко не знаю, что нужно искать.
Если какой-то информации не хватает, спрашивайте, я попытаюсь ответить на вопрос.
Offline Андрей *  
#2 Оставлено : 1 апреля 2025 г. 23:08:09(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,664
Мужчина
Российская Федерация

Сказал «Спасибо»: 571 раз
Поблагодарили: 2297 раз в 1798 постах
Здравствуйте.

Для подписания необходим закрытый ключ (ЗК),
для проверки открытый ключ, который записан в сертификат.
Сертификат вкладывают в файл, вместе с ЭП, всё это скрыто внутри,
достаточно иметь установленный личный сертификат в MY хранилище, он должен ссылаться на контейнер с закрытым ключом.

Сертификат выдает УЦ, сам УЦ может иметь корневой сертификат (root) и тогда цепочка сертификатов - 2 сертификата.
Либо УЦ является промежуточным и его сертификат в хранилище CA должен быть, а сертификат корневого (который выдал этому УЦ сертификат) в корневых (root), цепочка 3 (или более, когда несколько промежуточных) - root-> ca (ca2->ca3)-> my

Если рассматриваются квалифицированные подписи (в прод. применении)- то необходим квалифицированный сертификат,
который выдал аккредитованный УЦ, корневые в стране - от Минцифры (ранее Минкомсвязь, ранее Головной УЦ), далее АУЦ и пользовательский (личный) сертификаты.


По коду:

C.CadesSign(signType, store, thumbprint, pData, cDataLen, tspServer, pin, &blob)

thumbprint - это отпечаток личного сертификата, который необходимо использовать для поиска ЗК.


Что делать?

Для теста - начинаем с главной страницы сайта, для разработчиков, попадаем на тестовые УЦ,
пример:
http://testgost2012.cryptopro.ru/certsrv/

далее в браузере (плагин\расширение) - можно создать запрос и сразу получить тестовый сертификат от тестового УЦ.

Либо исследуя cryptcp и документацию на него (встроенную или pdf на странице загрузки СКЗИ) - получаем тоже, генерируя автоматически запрос и устанавливая тестовый сертификат (возможно позже пришлю ссылку на ветку или см. документацию).


Либо прилагаю тестовый сертификат с закрытым ключом, в pfx
пароль: 12345678

тестовый корневой: test.pfx.zip (3kb) загружен 1 раз(а)., установить в root (mroot - локальный компьютер, доступен всем, uroot - только в пользовательском профиле, если подписывается от определенной учётной записи)

установить сертификат и записать контейнер с ЗК в хранилище CSP:
Цитата:

/opt/cprocsp/bin/amd64/certmgr -install -pfx -file '/home/user/test.pfx' -pin 12345678








Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#3 Оставлено : 1 апреля 2025 г. 23:10:30(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,664
Мужчина
Российская Федерация

Сказал «Спасибо»: 571 раз
Поблагодарили: 2297 раз в 1798 постах
thumbprint это:
SHA1 отпечаток : 048d155bad60bd732e86fe8cb707c18e7f0b164f

посмотреть личные:
/opt/cprocsp/bin/amd64/certmgr -list -cert -store uMy
/opt/cprocsp/bin/amd64/certmgr -list -cert -store mMy
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#4 Оставлено : 1 апреля 2025 г. 23:32:14(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,664
Мужчина
Российская Федерация

Сказал «Спасибо»: 571 раз
Поблагодарили: 2297 раз в 1798 постах
еще вариант:

/opt/cprocsp/bin/amd64/cryptcp -creatrqst "/home/user/cert.req" -provtype 80 -provname "Crypto-Pro GOST R 34.10-2012 KC1 CSP" -dn "CN=ООО Оператор,S=77 г. Москва,O=ООО Оператор,OID.1.2.643.100.4=1234567890,C=RU" -certusage "1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4" -both -ku -exprt -cont 20250402


генерация запроса на сертификат

Цитата:
-----BEGIN NEW CERTIFICATE REQUEST-----
.... закодированный запрос
-----END NEW CERTIFICATE REQUEST-----


далее его можно отправить в тестовый УЦ через форму,
после - установить в личное, указав имя контейнера, при генерации

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 1 апреля 2025 г. 23:54:30(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,664
Мужчина
Российская Федерация

Сказал «Спасибо»: 571 раз
Поблагодарили: 2297 раз в 1798 постах
Цитата:
/opt/cprocsp/bin/amd64/cryptcp -help


сразу создать запрос и отправить в УЦ:
Цитата:

/opt/cprocsp/bin/amd64/cryptcp -createcert -dn "CN=ООО Оператор,S=77 г. Москва,O=ООО Оператор,OID.1.2.643.100.4=1234567890,C=RU" -provtype 80 -cont '\\.\HDIMAGE\test2025' -ca https://cryptopro.ru/certsrv


Техническую поддержку оказываем тут
Наша база знаний
Offline UncleVic  
#6 Оставлено : 4 апреля 2025 г. 19:43:27(UTC)
UncleVic

Статус: Новичок

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

Автор: Андрей * Перейти к цитате
Цитата:
/opt/cprocsp/bin/amd64/cryptcp -help


сразу создать запрос и отправить в УЦ:
Цитата:

/opt/cprocsp/bin/amd64/cryptcp -createcert -dn "CN=ООО Оператор,S=77 г. Москва,O=ООО Оператор,OID.1.2.643.100.4=1234567890,C=RU" -provtype 80 -cont '\\.\HDIMAGE\test2025' -ca https://cryptopro.ru/certsrv




Спасибо вам за такое развернутое пояснение.
Я решил использовать этот метод и у меня сразу в обоих сторах добавилось по 11 сертификатов. При этом, если говорить про thumbprint, то его указали в подтверждающем вопросе

Thumbprint (sha1): A897139C74FD0C6BAC153100D4EB46C8532C4FD3

и такой сертификат был создан в uRoot.



Дальше я начал экспериментировать и попробовать создать все с нуля, но имеющиеся сертификаты удалить не получается. Пробовал по разному
Код:

certmgr -delete -store uroot
certmgr -delete -store mroot
....


На все ответ один
Error while deleting requested certificate
Access is denied.
хоть под пользователем, под которым я запрашивал сертификат, хоть под root

Вот эта команда сработала и похоже удалила контейнер
Код:

certmgr -delete -store mroot -container '\\.\HDIMAGE\test2025'


Попробовал подписать файл
Код:

cryptcp -signf -thumbprint a897139c74fd0c6bac153100d4eb46c8532c4fd3 -uroot ./test.txt


В ответ


Я думал, что вот та команда "сразу создать запрос и отправить в УЦ:" она мне даст и приватный и публичный ключи. Я не прав? У всех сертификатов PrivateKey Link : No

Я попробовал установить сертификат из присланного вами файла. Он добавился в контейнер


Я пробовал подписать с его помощью, но этот сертификат не может быть найден ни в mroot, ни в uroot


Как мне сбросить хранилище к первоначальному состоянию?
Как все же подписать файл с помощью полученного командой или присланного вами сертификата?
Offline nickm  
#7 Оставлено : 4 апреля 2025 г. 19:58:47(UTC)
nickm

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

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

Сказал(а) «Спасибо»: 607 раз
Поблагодарили: 451 раз в 427 постах
Автор: UncleVic Перейти к цитате
Как мне сбросить хранилище к первоначальному состоянию?

Для очистки хранилища mroot, команду следует выполнять с повышенными правами, например:
Код:
# /opt/cprocsp/bin/amd64/certmgr -delete -store mroot -all


Автор: UncleVic Перейти к цитате
Как все же подписать файл с помощью полученного командой или присланного вами сертификата?

Можно предположить, что Вы часть команд выполняете от root, а часть от обычного пользователя, поэтому у Вас некоторые команды возвращают ошибку. Как вариант, перед попыткой подписания проверяйте, что необходимый сертификат содержится в хранилище сертификатов пользователя, в uMy.

Отредактировано пользователем 4 апреля 2025 г. 19:59:21(UTC)  | Причина: Не указана

Offline Андрей *  
#8 Оставлено : 4 апреля 2025 г. 21:37:26(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,664
Мужчина
Российская Федерация

Сказал «Спасибо»: 571 раз
Поблагодарили: 2297 раз в 1798 постах
сертификаты из контейнеров можно установить через
/opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
Техническую поддержку оказываем тут
Наша база знаний
Offline UncleVic  
#9 Оставлено : 4 апреля 2025 г. 21:45:22(UTC)
UncleVic

Статус: Новичок

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

Автор: nickm Перейти к цитате
Автор: UncleVic Перейти к цитате
Как мне сбросить хранилище к первоначальному состоянию?

Для очистки хранилища mroot, команду следует выполнять с повышенными правами, например:
Код:
# /opt/cprocsp/bin/amd64/certmgr -delete -store mroot -all



Я так тоже пробовал
Offline UncleVic  
#10 Оставлено : 4 апреля 2025 г. 22:11:06(UTC)
UncleVic

Статус: Новичок

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

Автор: Андрей * Перейти к цитате
сертификаты из контейнеров можно установить через
/opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov


Вот попробовал с самого начала в другой контейнер


И вот такие сертификаты есть

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