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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline UArtX  
#21 Оставлено : 19 июня 2020 г. 20:57:34(UTC)
UArtX

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

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

Сказал(а) «Спасибо»: 15 раз
Автор: Александр Лавник Перейти к цитате
Автор: UArtX Перейти к цитате
Автор: Александр Лавник Перейти к цитате
Автор: UArtX Перейти к цитате
Автор: Александр Лавник Перейти к цитате
Судя по сообщению, не хватает серверной лицензии КриптоПро CSP.

Проверить статус лицензии можно командой:

Код:
/opt/cprocsp/sbin/amd64/cpconfig -li -view




Код:
admin@web:~/nginx$ /opt/cprocsp/sbin/amd64/cpconfig -li -view
License validity:
4040...6
license  - permanent
License type: Client.



норма ?

Нет.

Должна быть серверная лицензия, а у Вас клиентская.



где взять тестовую серверную лицензию для проверки работы сервера с гост2012?

Если первая установка КриптоПро CSP 5.0 была менее, чем 3 месяца назад, то попробуйте активировать временную (3 месяца с момента первой установки) серверную лицензию, которая идет в составе КриптоПро CSP 5.0 (нужны права root/sudo):

Код:
sudo /opt/cprocsp/sbin/amd64/cpconfig -li -set 5050U-C0037-EKP59-NAXWV-WMCWE


Applause красава Dancing

Offline UArtX  
#22 Оставлено : 3 июля 2020 г. 15:26:02(UTC)
UArtX

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

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

Сказал(а) «Спасибо»: 15 раз
в nginx.conf указываем
user root;

сайт работает с гост сертификатом

если в nginx.conf указываем
user www-data;

не работает.



подскажите как заставить работать под www-data ?
Offline Александр Лавник  
#23 Оставлено : 4 июля 2020 г. 23:40:48(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 44 раз
Поблагодарили: 585 раз в 552 постах
Автор: UArtX Перейти к цитате
в nginx.conf указываем
user root;

сайт работает с гост сертификатом

если в nginx.conf указываем
user www-data;

не работает.



подскажите как заставить работать под www-data ?

Здравствуйте.

Предположу, что У Вас ключевой контейнер находится на жестком диске в директории для пользователя root:

Код:
/var/opt/cprocsp/keys/root/

Скопируйте нужный ключевой контейнер в директорию для пользователя www-data:

Код:
/var/opt/cprocsp/keys/www-data/

Смените владельца папки ключевого контейнера и его содержимого на www-data.

Выполните установку сертификата с привязкой к ключевому контейнеру от пользователя www-data:

Код:
sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
UArtX оставлено 06.07.2020(UTC)
Offline UArtX  
#24 Оставлено : 6 июля 2020 г. 7:32:48(UTC)
UArtX

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

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

Сказал(а) «Спасибо»: 15 раз
Автор: Александр Лавник Перейти к цитате

Здравствуйте.
Предположу, что У Вас ключевой контейнер находится на жестком диске в директории для пользователя root:
Код:
/var/opt/cprocsp/keys/root/

Скопируйте нужный ключевой контейнер в директорию для пользователя www-data:
Код:
/var/opt/cprocsp/keys/www-data/

Смените владельца папки ключевого контейнера и его содержимого на www-data.
Выполните установку сертификата с привязкой к ключевому контейнеру от пользователя www-data:
Код:
sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov




Выполнено
/var/opt/cprocsp/keys/root/
Скопируйте нужный ключевой контейнер в директорию для пользователя www-data :


Выполнено
/var/opt/cprocsp/keys/www-data/
Смените владельца папки ключевого контейнера и его содержимого на www-data.



Выполните установку сертификата с привязкой к ключевому контейнеру от пользователя www-data:
sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov

Результат
Код:

:/var/opt/cprocsp/keys$ sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
No containers.
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,010 sec
[ErrorCode: 0x00000000]


web
Код:
Не удается получить доступ к сайту
Веб-страница по адресу https://.../, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_FAILED


что крутить ?

Отредактировано пользователем 6 июля 2020 г. 7:34:16(UTC)  | Причина: Не указана

Offline Александр Лавник  
#25 Оставлено : 6 июля 2020 г. 17:04:14(UTC)
Александр Лавник

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

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

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

Приложите, пожалуйста, вывод команды:

Код:
ls -laR /var/opt/cprocsp/keys/www-data/
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
UArtX оставлено 06.07.2020(UTC)
Offline UArtX  
#26 Оставлено : 6 июля 2020 г. 18:18:02(UTC)
UArtX

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

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

Сказал(а) «Спасибо»: 15 раз
Автор: Александр Лавник Перейти к цитате
Здравствуйте.

Приложите, пожалуйста, вывод команды:

Код:
ls -laR /var/opt/cprocsp/keys/www-data/




Код:

$ ls -laR /var/opt/cprocsp/keys/www-data/
/var/opt/cprocsp/keys/www-data/:
total 12
drwx------ 3 user www-data 4096 июл  3 11:42 .
drwxrwxrwt 5 root   root     4096 июл  3 11:42 ..
drwx------ 2 user www-data 4096 июл  3 11:42 e7f3xx31.000

/var/opt/cprocsp/keys/www-data/e7f3xx31.000:
total 32
drwx------ 2 user www-data 4096 июл  3 11:42 .
drwx------ 3 user www-data 4096 июл  3 11:42 ..
-rw------- 1 user www-data 2291 июл  3 11:42 header.key
-rw------- 1 user www-data   56 июл  3 11:42 masks2.key
-rw------- 1 user www-data   56 июл  6 04:20 masks.key
-rw------- 1 user www-data   40 июл  3 11:42 name.key
-rw------- 1 user www-data   36 июл  3 11:42 primary2.key
-rw------- 1 user www-data   36 июл  6 04:20 primary.key


где проблема?

Отредактировано пользователем 6 июля 2020 г. 18:18:50(UTC)  | Причина: Не указана

Offline Александр Лавник  
#27 Оставлено : 6 июля 2020 г. 18:48:20(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 44 раз
Поблагодарили: 585 раз в 552 постах
Автор: UArtX Перейти к цитате
Автор: Александр Лавник Перейти к цитате
Здравствуйте.

Приложите, пожалуйста, вывод команды:

Код:
ls -laR /var/opt/cprocsp/keys/www-data/




Код:

$ ls -laR /var/opt/cprocsp/keys/www-data/
/var/opt/cprocsp/keys/www-data/:
total 12
drwx------ 3 user www-data 4096 июл  3 11:42 .
drwxrwxrwt 5 root   root     4096 июл  3 11:42 ..
drwx------ 2 user www-data 4096 июл  3 11:42 e7f3xx31.000

/var/opt/cprocsp/keys/www-data/e7f3xx31.000:
total 32
drwx------ 2 user www-data 4096 июл  3 11:42 .
drwx------ 3 user www-data 4096 июл  3 11:42 ..
-rw------- 1 user www-data 2291 июл  3 11:42 header.key
-rw------- 1 user www-data   56 июл  3 11:42 masks2.key
-rw------- 1 user www-data   56 июл  6 04:20 masks.key
-rw------- 1 user www-data   40 июл  3 11:42 name.key
-rw------- 1 user www-data   36 июл  3 11:42 primary2.key
-rw------- 1 user www-data   36 июл  6 04:20 primary.key


где проблема?

Измените владельца директории:

Код:
/var/opt/cprocsp/keys/www-data/

и вложенных директорий и файлов на пользователя www-data.

Сейчас владелец user.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
UArtX оставлено 06.07.2020(UTC)
Offline UArtX  
#28 Оставлено : 6 июля 2020 г. 19:16:12(UTC)
UArtX

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

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

Сказал(а) «Спасибо»: 15 раз
Измените владельца директории:

Код:
/var/opt/cprocsp/keys/www-data/

и вложенных директорий и файлов на пользователя www-data.

Сейчас владелец user.



изменено на

Код:

$ sudo -u www-data ls -laR /var/opt/cprocsp/keys/www-data/
/var/opt/cprocsp/keys/www-data/:
total 12
drwx------ 3 www-data www-data 4096 июл  3 11:42 .
drwxrwxrwt 5 root     root     4096 июл  3 11:42 ..
drwx------ 2 www-data www-data 4096 июл  3 11:42 e7f3xx31.000

/var/opt/cprocsp/keys/www-data/e7f3xx31.000:
total 32
drwx------ 2 www-data www-data 4096 июл  3 11:42 .
drwx------ 3 www-data www-data 4096 июл  3 11:42 ..
-rw------- 1 www-data www-data 2291 июл  3 11:42 header.key
-rw------- 1 www-data www-data   56 июл  3 11:42 masks2.key
-rw------- 1 www-data www-data   56 июл  6 04:20 masks.key
-rw------- 1 www-data www-data   40 июл  3 11:42 name.key
-rw------- 1 www-data www-data   36 июл  3 11:42 primary2.key
-rw------- 1 www-data www-data   36 июл  6 04:20 primary.key


перегружен nginx


web
Код:
Не удается получить доступ к сайту
Веб-страница по адресу https://.../, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_FAILED


где крутить?
Offline Александр Лавник  
#29 Оставлено : 6 июля 2020 г. 23:19:02(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 44 раз
Поблагодарили: 585 раз в 552 постах
А теперь опять попробуйте выполнить установку сертификата с привязкой к ключевому контейнеру от пользователя www-data:

Код:
sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
UArtX оставлено 07.07.2020(UTC)
Offline UArtX  
#30 Оставлено : 7 июля 2020 г. 6:31:37(UTC)
UArtX

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

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

Сказал(а) «Спасибо»: 15 раз
Автор: Александр Лавник Перейти к цитате
А теперь опять попробуйте выполнить установку сертификата с привязкой к ключевому контейнеру от пользователя www-data:

Код:
sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov




результат
Код:
:~$ sudo -u www-data /opt/cprocsp/bin/amd64/csptest -absorb -certs -autoprov
[sudo] password for user:
Match: HDIMAGE\\e7f3xx31.000\FCDD
OK.
Total: SYS: 0,000 sec USR: 0,000 sec UTC: 0,010 sec
[ErrorCode: 0x00000000]


перегружен nginx

web для www-data

Код:
Не удается получить доступ к сайту
Веб-страница по адресу https://.../, возможно, временно недоступна или постоянно перемещена по новому адресу.
ERR_FAILED


для проверки nginx под root`ом, работает

где необходимо подкрутить ?

Отредактировано пользователем 7 июля 2020 г. 6:34:28(UTC)  | Причина: Не указана

Offline Александр Лавник  
#31 Оставлено : 7 июля 2020 г. 16:33:51(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 44 раз
Поблагодарили: 585 раз в 552 постах
Уточнил у разработчиков gostengy.

Работать будет только с:

Код:
user root;


Как вариант можете попробовать запускать внешний nginx от root и ставить proxy_pass на внутренний nginx, который без TLS от www-data.

То есть запускать 2 nginx.

Первый будет работать под пользователем root и обслуживать 443 порт.

Будет принимать соединение и proxy_pass-ить на 2-ой запущенный nginx, который обслуживает только 80 (или любой другой порт) без использования TLS.
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Александр Лавник за этот пост.
Санчир Момолдаев оставлено 07.07.2020(UTC), UArtX оставлено 07.07.2020(UTC)
Offline maslito  
#32 Оставлено : 10 ноября 2020 г. 13:51:13(UTC)
maslito

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

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

Сказал(а) «Спасибо»: 3 раз
столкнулся с такой же ошибкой.
Контейнер есть, сертикификат есть.

Код:
root@8790fe2960e3:/opt/cprocsp/src/samples/CSP# /opt/cprocsp/bin/amd64/certmgr -list


Код:
Certmgr 1.1 (c) "Crypto-Pro", 2007-2020.
Program for managing certificates, CRLs and stores.
=============================================================================
1-------
Issuer              : T=Администратор, OU=Удостоверяющий и ключевой центр, O=Тестовый УЦ ИнфоТеКС, CN=Администратор Тестового УЦ ИнфоТеКС
Subject             : OGRN=1027806071930, INN=7811129343, CN=test8
Serial              : 0x01D6A92B997FDD700000001400050001
SHA1 Hash           : f8154bc5aafc2063b93a3d172f5d758c57d5599b
SubjKeyID           : 8f7e71b63882f5c69eb0a385227f9671e6da32bb
Signature Algorithm : ГОСТ Р 34.11-2012/34.10-2012 256 бит
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before    : 23/10/2020  10:59:00 UTC
Not valid after     : 14/12/2020  20:59:59 UTC
PrivateKey Link     : Yes                
Container           : HDIMAGE\\test8.000\76A4
Provider Name       : Crypto-Pro GOST R 34.10-2012 KC1 CSP


Пытаюсь зашифровать по ГОСТ 28147-89, есть код на С

Код:

...
// генерация эфемерной ключевой пары
    if(!CryptGenKey(hProv, /* CALG_DH_EL_EPHEM */ CALG_DH_GR3410_12_256_EPHEM, CRYPT_EXPORTABLE, &hEphemeralKey)) HandleError("Error during CryptGenKey Ephemeral key.");
#ifdef DEBUG_OUT
    printf("03. The Ephemeral key has been acquired. \n");
#endif
    // экспорт открытого ключа отправителя в BLOB
    if(!CryptExportKey(hEphemeralKey, 0, PUBLICKEYBLOB, 0, pbSenderPublicKeyBlob, &dwSenderPublicBlobLen)) HandleError("Error during CryptExportKey of Sender\'s public key.");
#ifdef DEBUG_OUT
    printf("04. The Sender public key has been acquired. size of Blob = %d bytes\n", dwSenderPublicBlobLen);
#endif
    // получаем значение открытого ключа отправителя из PUBLICKEYBLOB
    memcpy(&pbKeyCipherValue[PUBKEY_OFFSET], &pbSenderPublicKeyBlob[dwSenderPublicBlobLen-PUBKEY_LEN], PUBKEY_LEN);
#ifdef DEBUG_OUT
    if(!fwrite( pbSenderPublicKeyBlob, 1, dwSenderPublicBlobLen, fhSession_PublicKey)) HandleError( "The session key can not be written to the 'session_PublicKey.bin'\n" );
    printf("\tThe session key was written to the 'session_PublicKey.bin'\n" );
#endif
    // Получение дескриптора закрытого ключа отправителя. нам нужно для получения сертификата который вставим в запрос
    if(!389+89+(	cd , AT_KEYEXCHANGE, &hKey)) HandleError("Error during CryptGetUserKey private key.");
#ifdef DEBUG_OUT
    printf("05. The private key has been acquired. \n");
#endif
    printf(hKey);
    // определяем размер блока памяти для получения нашего сертификата который мы пошлем в ФСС
    if(!CryptGetKeyParam(hKey, KP_CERTIFICATE, NULL, &dwPubCertData, 0)) HandleError("Error during CryptGetKeyParam for determinating size of certificate.");
#ifdef DEBUG_OUT
    printf("06. The size for Public Certificate has been acquired. \n");
#endif
    pbPubCertData = (BYTE*)malloc(dwPubCertData);
    if(!pbPubCertData) HandleError("Out of memory. \n");
...


Ошибка происходит на строке
Код:
if(!CryptGetKeyParam(hKey, KP_CERTIFICATE, NULL, &dwPubCertData, 0)) HandleError("Error during CryptGetKeyParam for determinating size of certificate.");


Помогите понять в чем дело, почему не находится серфтикат в контейнере, если он есть?
Offline two_oceans  
#33 Оставлено : 11 ноября 2020 г. 10:46:35(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 313 раз в 295 постах
Добрый день. С "такой же" - это с какой? Автор темы тут наверно 5 или 6 разных ситуаций слепил в одну тему, про какую ошибку речь? Навскидку ни одна не похожа на Ваш вопрос.

По вопросу. Строчкой выше:
Цитата:
Код:
// Получение дескриптора закрытого ключа отправителя. нам нужно для получения сертификата который вставим в запрос
    if(!389+89+(	cd , AT_KEYEXCHANGE, &hKey)) HandleError("Error during CryptGetUserKey private key.");
Где, собственно, вызовы: 1. CryptAcquireContext с именем контейнера и 2. CryptGetUserKey? Без них в hKey будет неизвестно что и запросить сертификат не выйдет. Вместо 1 еще может быть CryptAcquireCertificatePrivateKey, но тогда проще сертификат взять напрямую из PCERT_CONTEXT как поле pbCertEncoded структуры _CERT_CONTEXT, а длину сертификата из поля cbCertEncoded.

Далее. Что в переменной cd? По смыслу там должен быть hProv. Ключ точно AT_KEYEXCHANGE? Например, я воздерживаюсь от указания константы AT_KEYEXCHANGE в коде, так как контейнер может неожиданно оказаться с ключом AT_SIGNATURE (есть и другие значения dwKeySpec, например, для CNG или УЭК). Для госта таким ключом AT_SIGNATURE тоже можно пользоваться при обмене ключей, но доставляет проблемы когда ключ получателя и ключ отправителя не одинаковые - один AT_KEYEXCHANGE, другой AT_SIGNATURE.

Отредактировано пользователем 11 ноября 2020 г. 11:12:10(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил two_oceans за этот пост.
maslito оставлено 11.11.2020(UTC)
Offline maslito  
#34 Оставлено : 11 ноября 2020 г. 13:13:01(UTC)
maslito

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

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

Сказал(а) «Спасибо»: 3 раз
Автор: two_oceans Перейти к цитате
Добрый день. С "такой же" - это с какой? Автор темы тут наверно 5 или 6 разных ситуаций слепил в одну тему, про какую ошибку речь? Навскидку ни одна не похожа на Ваш вопрос.

Проблема в том что скрипт возвращает ошибку 0x8010002c
Автор: two_oceans Перейти к цитате

Где, собственно, вызовы: 1. CryptAcquireContext с именем контейнера и 2. CryptGetUserKey? Без них в hKey будет неизвестно что и запросить сертификат не выйдет. Вместо 1 еще может быть CryptAcquireCertificatePrivateKey, но тогда проще сертификат взять напрямую из PCERT_CONTEXT как поле pbCertEncoded структуры _CERT_CONTEXT, а длину сертификата из поля cbCertEncoded.

Далее. Что в переменной cd? По смыслу там должен быть hProv. Ключ точно AT_KEYEXCHANGE? Например, я воздерживаюсь от указания константы AT_KEYEXCHANGE в коде, так как контейнер может неожиданно оказаться с ключом AT_SIGNATURE (есть и другие значения dwKeySpec, например, для CNG или УЭК). Для госта таким ключом AT_SIGNATURE тоже можно пользоваться при обмене ключей, но доставляет проблемы когда ключ получателя и ключ отправителя не одинаковые - один AT_KEYEXCHANGE, другой AT_SIGNATURE.

Прошу прощения выложил какой-то кривой кусок.Никакой переменно cd нет, видимо попала сюда при переключения с консоли. Выкладываю надлежащий:
Код:

...
    // Получение дескриптора контейнера отправителя, находящегося в рамках провайдера. 
    if(!CryptAcquireContext( &hProv, argv[1], NULL, PROV_GOST_2012_256, 0)) HandleError("Error during CryptAcquireContext.");
#ifdef DEBUG_OUT
    printf("02. The key container \"%s\" has been acquired. \n", argv[1]);
#endif
    // Загрузка PUBLICKEYBLOB из сертификата, открытие файла, в котором содержится открытый ключ получателя.
    if((fhCert = fopen(argv[2], "rb")))
    {
#ifdef DEBUG_OUT
	    printf( "\tThe file '%s' was opened\n",  argv[2]);
#endif
	    cbCert = (DWORD)fread(pbCert, 1, cbCert, fhCert);
        if(!cbCert) HandleError( "Failed to read certificate\n" );
#ifdef DEBUG_OUT
        printf( "\tCertificate was read from the '%s'\n", argv[2] );
#endif
        pCertContext = CertCreateCertificateContext ( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, pbCert, cbCert);
        if (!pCertContext) HandleError( "CertCreateCertificateContext" );

   	    // Импортируем открытый ключ
        if (!CryptImportPublicKeyInfoEx( hProv, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, &(pCertContext->pCertInfo->SubjectPublicKeyInfo), 0, 0, NULL, &hPubKey)) 
        {
            CertFreeCertificateContext(pCertContext);
            HandleError( "CryptImportPublicKeyInfoEx" );
        }
#ifdef DEBUG_OUT
        printf("\tPublic key imported from cert file\n");
#endif
        CertFreeCertificateContext(pCertContext);
	
        // экспорт открытого ключа получателя в BLOB
        if (!CryptExportKey( hPubKey, 0, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen)) HandleError( "CryptExportKey" );
#ifdef DEBUG_OUT
        printf("\tPublic key exported to blob\n");
#endif
    }

// begin hack
    // генерация эфемерной ключевой пары
    if(!CryptGenKey(hProv, /* CALG_DH_EL_EPHEM */ CALG_DH_GR3410_12_256_EPHEM, CRYPT_EXPORTABLE, &hEphemeralKey)) HandleError("Error during CryptGenKey Ephemeral key.");
#ifdef DEBUG_OUT
    printf("03. The Ephemeral key has been acquired. \n");
#endif
    // экспорт открытого ключа отправителя в BLOB
    if(!CryptExportKey(hEphemeralKey, 0, PUBLICKEYBLOB, 0, pbSenderPublicKeyBlob, &dwSenderPublicBlobLen)) HandleError("Error during CryptExportKey of Sender\'s public key.");
#ifdef DEBUG_OUT
    printf("04. The Sender public key has been acquired. size of Blob = %d bytes\n", dwSenderPublicBlobLen);
#endif
    // получаем значение открытого ключа отправителя из PUBLICKEYBLOB
    memcpy(&pbKeyCipherValue[PUBKEY_OFFSET], &pbSenderPublicKeyBlob[dwSenderPublicBlobLen-PUBKEY_LEN], PUBKEY_LEN);
#ifdef DEBUG_OUT
    if(!fwrite( pbSenderPublicKeyBlob, 1, dwSenderPublicBlobLen, fhSession_PublicKey)) HandleError( "The session key can not be written to the 'session_PublicKey.bin'\n" );
    printf("\tThe session key was written to the 'session_PublicKey.bin'\n" );
#endif
    // Получение дескриптора закрытого ключа отправителя. нам нужно для получения сертификата который вставим в запрос
    if(!CryptGetUserKey(	hProv, AT_KEYEXCHANGE, &hKey)) HandleError("Error during CryptGetUserKey private key.");
#ifdef DEBUG_OUT
    printf("05. The private key has been acquired. \n");
#endif
    // определяем размер блока памяти для получения нашего сертификата который мы пошлем в ФСС
    if(!CryptGetKeyParam(hKey, KP_CERTIFICATE, NULL, &dwPubCertData, 0)) HandleError("Error during CryptGetKeyParam for determinating size of certificate.");
#ifdef DEBUG_OUT
    printf("06. The size for Public Certificate has been acquired. \n");
#endif



Оишбка при вызове последнего метода. Что вы указываете вместо AT_KEYEXCHANGE ?
Вообще ключ определяется как exchange.
Код:

root@89ab132f3286:/opt/cprocsp/src/samples/CSP# csptest -keyset -check -cont 'test8'
CSP (Type:80) v5.0.10006 KC1 Release Ver:5.0.11944 OS:Linux CPU:AMD64 FastCode:READY:SSSE3,AVX.
AcquireContext: OK. HCRYPTPROV: 14719875
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "test8"
Check header passed.
Signature key is not available.
Exchange key is available. HCRYPTKEY: 0xe62fd3
Symmetric key is not available.
UEC key is not available.
Check container passed.
Check sign passed.
Check verify signature on private key passed.
Check verify signature on public key passed.
Check import passed.
Keys in container:
  exchange key
Extensions:
  OID: 1.2.643.2.2.37.3.10
  PrivKey: Not specified - 23.01.2022 10:58:48 (UTC)
Total: SYS: 0.020 sec USR: 0.030 sec UTC: 0.500 sec
[ErrorCode: 0x00000000]



Может быть проблема втом что опыты провожу на ключах сгенерированных на тестовом УЦ ?

Отредактировано пользователем 11 ноября 2020 г. 13:25:55(UTC)  | Причина: Не указана

Offline Александр Лавник  
#35 Оставлено : 11 ноября 2020 г. 17:46:25(UTC)
Александр Лавник

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

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

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

Судя по результату тестирования ключевого контейнера, внутри ключевого контейнера нет сертификата.

Предположу, что это причина ошибки 0x8010002c (Требуемый сертификат не существует) при вызове:

Код:
CryptGetKeyParam(hKey, KP_CERTIFICATE, NULL, &dwPubCertData, 0)
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
maslito оставлено 11.11.2020(UTC)
Offline maslito  
#36 Оставлено : 12 ноября 2020 г. 13:05:31(UTC)
maslito

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

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

Сказал(а) «Спасибо»: 3 раз
Однако сертификат установлен, контейнер есть. Через PhpCades получается подписывать.
Как убедиться что сертификат в конйтенере есть? Я ставил его через certmgr -inst -file cert.cert -cont test8.
Может быть такое из-за тестового сертификата?
Offline two_oceans  
#37 Оставлено : 12 ноября 2020 г. 13:11:01(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 313 раз в 295 постах
Установлен куда? Если в хранилище сертификатов со ссылкой на контейнер, то можно сделать по другому - передавать вместо имени контейнера отпечаток сертификата и сначала находить сертификат в хранилище по отпечатку, потом получать ссылку на контейнер из хранилища и открывать контейнер. В результате будут те же сертификат и контейнер, но в другом порядке получения. Вероятно phpcades использует такой порядок.

Отредактировано пользователем 12 ноября 2020 г. 13:12:41(UTC)  | Причина: Не указана

Offline Александр Лавник  
#38 Оставлено : 12 ноября 2020 г. 13:18:28(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 44 раз
Поблагодарили: 585 раз в 552 постах
Автор: maslito Перейти к цитате
Однако сертификат установлен, контейнер есть. Через PhpCades получается подписывать.
Как убедиться что сертификат в конйтенере есть? Я ставил его через certmgr -inst -file cert.cert -cont test8.
Может быть такое из-за тестового сертификата?

Здравствуйте.

Дело не в тестовом сертификате.

Проверить наличие сертификата внутри ключевого контейнера можно тестированием этого контейнера (что Вы и cделали ранее) или с использованием команды вида:

Код:
certmgr -list -cont test8
Техническую поддержку оказываем тут
Наша база знаний
Offline Александр Лавник  
#39 Оставлено : 12 ноября 2020 г. 13:21:12(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 44 раз
Поблагодарили: 585 раз в 552 постах
Добавлю, что установить сертификат в ключевой контейнер с одновременной установкой сертификата в хранилище my (Личное) с привязкой к ключевому контейнеру можно командой вида:

Код:
certmgr -inst -file cert.cert -cont test8 -inst_to_cont
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Александр Лавник за этот пост.
maslito оставлено 12.11.2020(UTC)
Offline maslito  
#40 Оставлено : 12 ноября 2020 г. 15:30:48(UTC)
maslito

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

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

Сказал(а) «Спасибо»: 3 раз
Автор: Александр Лавник Перейти к цитате
Добавлю, что установить сертификат в ключевой контейнер с одновременной установкой сертификата в хранилище my (Личное) с привязкой к ключевому контейнеру можно командой вида:

Код:
certmgr -inst -file cert.cert -cont test8 -inst_to_cont


Спасибо, Ваше решение сработало, нужен был ключ -inst_to_cont .

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