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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Vlady84  
#1 Оставлено : 2 июля 2022 г. 14:05:38(UTC)
Vlady84

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

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

Поблагодарили: 1 раз в 1 постах
Нужна помощь в авторизации по API в Честном знаке.

Система авторизации там такая

Код:

curl -X GET "<url стенда v3>/auth/key"
-H "accept: application/json"


Код:

Ответ
{
   "uuid":"a63ff582-b723-4da7-958b-453da27a6c62", // Уникальный идентификатор сгенерированных случайных данных
   "data":"GNUFBAZBMPIUUMLXNMIOGSHTGFXZMT" // Случайная строка данных
}


Далее

Код:

curl -X POST "<url стенда v3>/auth/simpleSignIn"
-H "accept: application/json"
-H "Content-Type: application/json"

{
   "uuid":"string", // полученный id
   "data":"string" // Подписанные УКЭП зарегистрированного УОТ случайные данные в base64 (присоединённая ЭП)
}


Как подписать эту строку на удаленном Linux сервере.

Я установил там КриптоПро для Linux
Содержимое папки на сервере

certmgr
cpverify
cryptcp
csptest > csptestf
csptestf
csptestlite
curl
der2xer
genkpim
inittst
list_pcsc
wipefile

В вебинаре Честного знака сказали что-то про "экспорт сертификата".
Экспорт сертификата ИП я нашел, как сделать, из виндового приложения КриптоПро ноута, который работает с флешкой,
а как заставить удаленный сервак подписать эту строку, необходимую для авторизации ?
thanks 1 пользователь поблагодарил Vlady84 за этот пост.
AndreyAA оставлено 13.02.2024(UTC)
Offline Андрей *  
#2 Оставлено : 2 июля 2022 г. 15:03:34(UTC)
Андрей *

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

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

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

Контейнер (папка с .key файлами или в каком виде имеется?) перенесён на сервер? Сертификат установили в хранилище?



Цитата:

как заставить удаленный сервак подписать эту строку, необходимую для авторизации ?


Подписание:
/opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint отпечаток "/path/file.txt" "/path/file.txt.p7s" -nochain -norev

file.txt - содержит текстовую строку

file.txt.p7s - будет содержать присоединенную подпись (данные из file.txt, сертификат, подпись)

далее прочитать file.txt.p7s, закодировать в base64 и отправить запрос через curl

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
AndreyAA оставлено 13.02.2024(UTC)
Offline Андрей *  
#3 Оставлено : 2 июля 2022 г. 15:13:21(UTC)
Андрей *

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

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

Сказал «Спасибо»: 537 раз
Поблагодарили: 2176 раз в 1701 постах
либо другой вариант, через php - собрать расширение и подписывать\отправлять из php
Техническую поддержку оказываем тут
Наша база знаний
Offline Vlady84  
#4 Оставлено : 2 июля 2022 г. 16:49:43(UTC)
Vlady84

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

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

Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
либо другой вариант, через php - собрать расширение и подписывать\отправлять из php


Спасибо большое. Да, это то, что нужно.
Offline Vlady84  
#5 Оставлено : 22 июля 2022 г. 1:03:45(UTC)
Vlady84

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

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

Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
либо другой вариант, через php - собрать расширение и подписывать\отправлять из php


Пробовал собрать, не работает
eval `/opt/cprocsp/src/doxygen/CSP/../setenv.sh --64`; make -f Makefile.unix
постоянно выдает кучу разных ошибок. То файла .h какого то не хватает, по версия не та. Причем почти все из них обсуждались на форуме.
Пробовал патч, пробовал все версии. Бесполезно. Php 7.4
Snimok ehkrana 2022-07-22 010226.png (91kb) загружен 2 раз(а).
Offline Vlady84  
#6 Оставлено : 22 июля 2022 г. 1:05:22(UTC)
Vlady84

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

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

Поблагодарили: 1 раз в 1 постах
Автор: Андрей * Перейти к цитате
Здравствуйте.

Контейнер (папка с .key файлами или в каком виде имеется?) перенесён на сервер? Сертификат установили в хранилище?



Цитата:

как заставить удаленный сервак подписать эту строку, необходимую для авторизации ?


Подписание:
/opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint отпечаток "/path/file.txt" "/path/file.txt.p7s" -nochain -norev

file.txt - содержит текстовую строку

file.txt.p7s - будет содержать присоединенную подпись (данные из file.txt, сертификат, подпись)

далее прочитать file.txt.p7s, закодировать в base64 и отправить запрос через curl



Устанавливаю сертификат для пользователя www-root
sudo -u www-root /opt/cprocsp/bin/amd64/certmgr -inst -all -store uMy -file /home/cert.p7b

Пытаюсь подписать файл
sudo -u www-root /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint e07bcb550e38222ea9d0142c4c574bdd471df28f "/var/www/www-root/data/test.txt" "/var/www/www-root/data/test.txt.p7s" -nochain -norev

CryptCP 5.0 (c) "Crypto-Pro", 2002-2022.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN:хххххххххххххххххххххххххххххххххххххх
Valid from 01.02.2022 11:00:15 to 01.05.2023 11:10:15

Folder '/var/www/www-root/data/':
/var/www/www-root/data/test.txt... Error: Can not get certificate private key.
../../../../CSPbuild/CSP/samples/CPCrypt/DSign.cpp:489: 0x20000136
[ErrorCode: 0x20000136]

Где взять этот закрытый ключ, и как его установить (в контейнер, видимо).
Ключ вроде как должен находиться на флешке синей (иначе, зачем она нужна каждый раз).
Но сервер находится в датацентре за границей и воткнуть ее туда невозможно.
Правильно ли я понимаю, что вытащить закрытый ключ из флешки невозможно и она обязательно нужна, как физической объект,
а следовательно, единственный способ автоматизировать подпись, это собрать комп на статическом ip, куда воткнуть эту флешку ?

И, если все это так, что как создать этот самый контейнер ?

Отредактировано пользователем 22 июля 2022 г. 2:16:53(UTC)  | Причина: Не указана

Offline two_oceans  
#7 Оставлено : 1 августа 2022 г. 13:32:37(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Добрый день.
Советовать насчет сервера за границей сложно, лучше бы что-то в пределах своей страны использовать для подписания. Могут быть разные "несоответствия" при передаче ключа через границу.

По вопросу - есть еще и облачные подписи, в таком случае на физический объект флешка не понадобится. Поддерживаются в КриптоПро с 5 версии.

Насчет копирования ключа на сервер (допустим, в своей стране) важно знать:
а) неизвлекаемый (неэкспортируемый) ли ключ и б) обычная флешка или токен.
1. Если флешка обычная, то достаточно скопировать контейнер (папку с именем вроде хххххххх.000 и с 6 файликами key) в определенную папку на сервере, примерно /var/opt/cprocsp/keys/root/ если запускаете под root. Далее установить сертификат с привязкой к контейнеру.
2. Если токен и ключ извлекаемый (экспортируемый), то можно штатно скопировать на обычную флешку средствами КриптоПро, далее как в предыдущем пункте.
3. Если токен и ключ неизвлекаемый (неэкспортируемый), - в активном или пассивном режиме создан ключ. Активный режим приговаривает к ситуации когда должен торчать конкретный физический носитель и больше никак. Пассивный режим означает, что токен только хранилище и в теории можно попробовать считать ключ, затем записать копию. "В теории", потому что штатные средства тут не помогут, а соответствующие форматы не афишируют. Поэтому более реально перевыпустить сертификат специально указав, что ключ должен быть экспортируемый.
Offline Vlady84  
#8 Оставлено : 5 сентября 2022 г. 1:51:23(UTC)
Vlady84

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

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

Поблагодарили: 1 раз в 1 постах
Автор: two_oceans Перейти к цитате
Добрый день.
Советовать насчет сервера за границей сложно, лучше бы что-то в пределах своей страны использовать для подписания. Могут быть разные "несоответствия" при передаче ключа через границу.

По вопросу - есть еще и облачные подписи, в таком случае на физический объект флешка не понадобится. Поддерживаются в КриптоПро с 5 версии.

Насчет копирования ключа на сервер (допустим, в своей стране) важно знать:
а) неизвлекаемый (неэкспортируемый) ли ключ и б) обычная флешка или токен.
1. Если флешка обычная, то достаточно скопировать контейнер (папку с именем вроде хххххххх.000 и с 6 файликами key) в определенную папку на сервере, примерно /var/opt/cprocsp/keys/root/ если запускаете под root. Далее установить сертификат с привязкой к контейнеру.
2. Если токен и ключ извлекаемый (экспортируемый), то можно штатно скопировать на обычную флешку средствами КриптоПро, далее как в предыдущем пункте.
3. Если токен и ключ неизвлекаемый (неэкспортируемый), - в активном или пассивном режиме создан ключ. Активный режим приговаривает к ситуации когда должен торчать конкретный физический носитель и больше никак. Пассивный режим означает, что токен только хранилище и в теории можно попробовать считать ключ, затем записать копию. "В теории", потому что штатные средства тут не помогут, а соответствующие форматы не афишируют. Поэтому более реально перевыпустить сертификат специально указав, что ключ должен быть экспортируемый.


Нашел, как вытащить закрытый ключ с рутокена. Скопировал 6 .key файлов в папку.
Контейнер видит

root@server0:/opt/cprocsp/bin/amd64# /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn
CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.12500 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 39012595
\\.\HDIMAGE\d57b44fd-7ac9-4479-bf9a-b6be6d111eca-1
OK.
Total: SYS: 0.000 sec USR: 0.000 sec UTC: 0.010 sec
[ErrorCode: 0x00000000]

но упорно не хочет брать из него ключ

root@server0:/opt/cprocsp/bin/amd64# sudo -u www-root /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint e07bcb550e38222ea9d0142c4c574bdd471df28f "/var/www/www-root/data/test.txt" "/var/www/www-root/data/test.txt.p7s" -nochain -norev
CryptCP 5.0 (c) "Crypto-Pro", 2002-2022.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Valid from 01.02.2022 11:00:15 to 01.05.2023 11:10:15

Folder '/var/www/www-root/data/':
/var/www/www-root/data/test.txt... Error: Can not get certificate private key.
../../../../CSPbuild/CSP/samples/CPCrypt/DSign.cpp:489: 0x20000136
[ErrorCode: 0x20000136]
root@server0:/opt/cprocsp/bin/amd64#

Offline two_oceans  
#9 Оставлено : 5 сентября 2022 г. 7:38:15(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 395 раз в 366 постах
Автор: Vlady84 Перейти к цитате
Контейнер видит
root@server0:/opt/cprocsp/bin/amd64# /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn
но упорно не хочет брать из него ключ
root@server0:/opt/cprocsp/bin/amd64# sudo -u www-root /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint e07bcb550e38222ea9d0142c4c574bdd471df28f "/var/www/www-root/data/test.txt" "/var/www/www-root/data/test.txt.p7s" -nochain -norev
Добрый день. Это уже детали процедуры установки сертификата, которые чуть не в каждом руководстве по установке сертификата на Linux описываются. Конечно лишний раз повторить не помешает.

Во-первых, важно, чтобы команды были от одного пользователя. Выше одна команда без sudo то есть от самого пользователя root, а вторая (если я правильно понимаю) от www-root.

Если root контейнер HDIMAGE ищется в папке /var/opt/cprocsp/keys/root/ Если www-root контейнер HDIMAGE ищется в папке /var/opt/cprocsp/keys/www-root/ У соответствующего пользователя должны быть права на нужную папку - чтение и запись. (Для видимости всем по идее еще какая-то папка, но используется нечасто, так что точно не знаю.) Таким образом, в одном случае контейнер увидится, в другом нет. Тем не менее, обычно в такой ситуации из функций нижнего уровня "выскакивает" другая ошибка - "Набор ключей не существует" и делается попытка его сгенерировать. Другой код ошибки вероятно указывает, что еще с чем-то не все в порядке.

Во-вторых, если при подписании указывается не имя контейнера, а сертификат или реквизиты (отпечаток в командной строке выше) сертификата, то сертификат должен быть: а) установлен в хранилище сертификатов - выше можно увидеть в выводе что нашелся, показало его срок действия; б) при установке в хранилище должен быть указан контейнер для этого сертификата. Проверить можно командой (от нужного пользователя) вроде такой sudo -u www-root /opt/cprocsp/bin/amd64/certmgr -list -store uMy где uMy - имя хранилища, ищем строку PrivateKey: Yes и совпадение строки Container: с тем, что выдало csptest -keyset -enum_cont -verifycontext -fqcn , то есть \\.\HDIMAGE\d57b44fd-7ac9-4479-bf9a-b6be6d111eca-1

Если PrivateKey: No или неверное имя контейнера, то нужно переустановить сертификат в хранилище.

Отредактировано пользователем 5 сентября 2022 г. 7:41:24(UTC)  | Причина: Не указана

Offline Vlady84  
#10 Оставлено : 5 сентября 2022 г. 22:41:28(UTC)
Vlady84

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

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

Поблагодарили: 1 раз в 1 постах
Автор: two_oceans Перейти к цитате
Автор: Vlady84 Перейти к цитате
Контейнер видит
root@server0:/opt/cprocsp/bin/amd64# /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn
но упорно не хочет брать из него ключ
root@server0:/opt/cprocsp/bin/amd64# sudo -u www-root /opt/cprocsp/bin/amd64/cryptcp -sign -thumbprint e07bcb550e38222ea9d0142c4c574bdd471df28f "/var/www/www-root/data/test.txt" "/var/www/www-root/data/test.txt.p7s" -nochain -norev
Добрый день. Это уже детали процедуры установки сертификата, которые чуть не в каждом руководстве по установке сертификата на Linux описываются. Конечно лишний раз повторить не помешает.

Во-первых, важно, чтобы команды были от одного пользователя. Выше одна команда без sudo то есть от самого пользователя root, а вторая (если я правильно понимаю) от www-root.

Если root контейнер HDIMAGE ищется в папке /var/opt/cprocsp/keys/root/ Если www-root контейнер HDIMAGE ищется в папке /var/opt/cprocsp/keys/www-root/ У соответствующего пользователя должны быть права на нужную папку - чтение и запись. (Для видимости всем по идее еще какая-то папка, но используется нечасто, так что точно не знаю.) Таким образом, в одном случае контейнер увидится, в другом нет. Тем не менее, обычно в такой ситуации из функций нижнего уровня "выскакивает" другая ошибка - "Набор ключей не существует" и делается попытка его сгенерировать. Другой код ошибки вероятно указывает, что еще с чем-то не все в порядке.

Во-вторых, если при подписании указывается не имя контейнера, а сертификат или реквизиты (отпечаток в командной строке выше) сертификата, то сертификат должен быть: а) установлен в хранилище сертификатов - выше можно увидеть в выводе что нашелся, показало его срок действия; б) при установке в хранилище должен быть указан контейнер для этого сертификата. Проверить можно командой (от нужного пользователя) вроде такой sudo -u www-root /opt/cprocsp/bin/amd64/certmgr -list -store uMy где uMy - имя хранилища, ищем строку PrivateKey: Yes и совпадение строки Container: с тем, что выдало csptest -keyset -enum_cont -verifycontext -fqcn , то есть \\.\HDIMAGE\d57b44fd-7ac9-4479-bf9a-b6be6d111eca-1

Если PrivateKey: No или неверное имя контейнера, то нужно переустановить сертификат в хранилище.


Спасибо большое за ваш труд.
По рутом все работает ! )
но

root@server0:~# sudo -u www-root /opt/cprocsp/bin/amd64/certmgr -inst -all -store uMy -file /home/cert.p7b -cont '\\.\HDIMAGE\d57b44fd-7ac9-4479-bf9a-b6be6d111eca-1'

показывает данные серта
PrivateKey Link : No
Identification Kind : Personal presence

и пишет
Installing multiple certificates with private key link is not allowed

The data is invalid.

Я удалял серт и контейнер и создавал заново

/var/opt/cprocsp/keys/www-root/ - .key файлы залил, владельца поменял на www-root

/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn
и
sudo -u www-root /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifycontext -fqcn

показывают контейнеры для обоих пользователей

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