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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline olegyam  
#1 Оставлено : 15 марта 2018 г. 14:13:55(UTC)
olegyam

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

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

Следую примеру из /opt/cprocsp/src/doxygen/CSP/ExportingCertificate/ExportingCertificate.c, но пишу не на Си, а на C# .NET Core, обращаясь к libcapi2.so с помощью InteropServices.

Код, вызывающий функции библиотеки: https://pastebin.com/N8HjZQy3
Код класса Libcapi: https://pastebin.com/Z3AqZCEn

Все идет хорошо до вызова CryptImportKey, который возвращает ошибку NTE_KEYSET_NOT_DEF "The keyset is not defined."

Код:

CryptImportKey = False
hAgreeKey = 0
GetLastError: 2148073497 (0x80090019)


В качестве сертификата получателя используется тестовый корневой сертификат КриптоПро. В качестве сертификата отправителя - выданный тестовым УЦ сертификат. Если это важно - второй сертификат был получен на Windows и импортирован на машину с Linux в контейнере. Данные о сертификатах:

Код:

=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : E=test@example.com, CN=Игнат Игнатьевич
Serial              : 0x120026A25B02FCF150BD105E7600000026A25B
SHA1 Hash           : 0x7c8380055be20382f30163681b6c2d8474f270de
SubjKeyID           : b2a6c439bd8838dcf80f360688752ab10c44ee1b
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 13/03/2018  11:10:36 UTC
Not valid after     : 13/06/2018  11:20:36 UTC
PrivateKey Link     : Yes                 
Container           : HDIMAGE\\e0696711.000\A055
Provider Name       : Crypto-Pro GOST R 34.10-2012 KC1 CSP
Provider Info       : ProvType: 80, KeySpec: 1, 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.2
2-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash           : 0x046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID           : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after     : 05/08/2019  13:54:03 UTC
PrivateKey Link     : No                  
=============================================================================


Я не понимаю, почему CryptImportKey возвращает мне эту ошибку. Шифрование-расшифровка с помощью утилиты cryptcp проходит без проблем.
Offline olegyam  
#2 Оставлено : 15 марта 2018 г. 17:28:57(UTC)
olegyam

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

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

Переписал на Си, проблема та же: https://pastebin.com/vLv0dvxz
Полный вывод программы:

Код:

CryptAcquireCertificatePrivateKey = 1
hSenderProv = 34230691
senderPrivKeySpec = 1

CryptGetUserKey = 1
hSenderPrivKey = 34259747

CryptImportPublicKeyInfoEx = 1
hReceiverPubKey = 34287875

CryptExportKey = 1
recPubLen = 100
GetLastError = 0

CryptImportKey = 0
hAgreeKey = 0
GetLastError = 80090019
Offline olegyam  
#3 Оставлено : 15 марта 2018 г. 17:39:24(UTC)
olegyam

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

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

Контейнер проверил, ошибок нет:

Код:

$ csptest -keyset -check -cont 'HDIMAGE\\e0696711.000\A055'
CSP (Type:80) v4.0.9014 KC1 Release Ver:4.0.9842 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6845443
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "e0696711d-4344-7ea2-108d-b3d34ec1bf9"
Check header passed.
Signature key is not available.
Exchange key is available. HCRYPTKEY: 0x6bb2f3
uec key is not available.
Check container passed.
CPCSP: Signing with the use of GOST R 34.10-2001 keys is not allowed from January 1st, 2019. You should move to the use of GOST R 34.10-2012 keys instead.
Continue using the GOST R 34.10-2001 key?
(o) OK, (c) Cancel
o
Check sign passed.
Check verify signature on private key passed.
Check verify signature on public key passed.
Check import passed.
Certificate in container matches AT_KEYEXCHANGE key.
Keys in container:
  exchange key
Extensions:
  OID: 1.2.643.2.2.37.3.10
Total: SYS: 0,000 sec USR: 0,040 sec UTC: 2,500 sec
[ErrorCode: 0x00000000]


Пишет Signature key is not available, но проблема же не в этом? Потому что при получении сертификата я выбрал "для подписи и обмена".
Offline olegyam  
#4 Оставлено : 16 марта 2018 г. 13:24:31(UTC)
olegyam

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

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

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