Ошибка эцп cryptoapi exception cryptacquirecertificateprivatekey failed lastwinerror 0x80090016


Offline

ahtoh

 


#1
Оставлено
:

16 января 2013 г. 14:59:29(UTC)

ahtoh

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

Группы: Участники

Зарегистрирован: 23.09.2011(UTC)
Сообщений: 17

Ubuntu 12.04

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

Код:


HCRYPTPROV enumerationProvider = 0;
CryptAcquireContext(&enumerationProvider, 0, 0, PROV_GOST_2001_DH, CRYPT_VERIFYCONTEXT);
DWORD containerNameSize = 1024;
String containerNameLocal;
containerNameLocal.resize(containerNameSize);
if (CryptGetProvParam(enumerationProvider, PP_ENUMCONTAINERS, (BYTE*)containerNameLocal.data(), &containerNameSize, CRYPT_FIRST))
{
	WString alias;
	KeyInfo info;
	do
	{
		containerNameLocal.resize(containerNameSize);
		HCRYPTPROV containerProvider = 0;
		if(!CryptAcquireContextA(&containerProvider, containerNameLocal.c_str(), 0, PROV_GOST_2001_DH, 0))
		{
			continue;
		}
		HCRYPTKEY key = 0;
		if (!CryptGetUserKey(containerProvider, AT_SIGNATURE, &key))
		{
			CryptReleaseContext(containerProvider, 0);
			continue;
		}
		DWORD certificateSize = 0;
		if (!CryptGetKeyParam(key, KP_CERTIFICATE, 0, &certificateSize, 0))
		{
			CryptDestroyKey(key);
			CryptReleaseContext(containerProvider, 0);
			continue;
		}
		KeyInfo info;
		info.alias = getName(containerProvider, PP_CONTAINER);
		ByteArray certificate(certificateSize);
		poco_assert(CryptGetKeyParam(key, KP_CERTIFICATE, (BYTE*)certificate.data(), &certificateSize, 0));
		certificate.resize(certificateSize);
		info.certificate = certificate;
		CryptDestroyKey(key);
		CryptReleaseContext(containerProvider, 0);

		containerNameSize = 1024;
		containerNameLocal.resize(containerNameSize);
	} while(CryptGetProvParam(enumerationProvider, PP_ENUMCONTAINERS, (BYTE*)containerNameLocal.data(), &containerNameSize, CRYPT_NEXT));
}
CryptReleaseContext(enumerationProvider, 0);

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

Код:


_provider = 0;
_keySpec = AT_SIGNATURE;
_isNeedCleenup = TRUE;
PCERT_CONTEXT _certificate = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, (BYTE*)certificate.data(), (DWORD)certificate.size());
CryptAcquireCertificatePrivateKey(_certificate, CRYPT_SILENT, 0, &_provider, &_keySpec, &_isNeedCleenup);

CryptAcquireCertificatePrivateKey возвращает 0, GetLastError возвращает 0x80090020

Я знаю, что для Windows этот код работает только если установить личный сертификат из контейнера, но даже без установленного сертификата на Windows код ошибки возвращался более осмысленный.

Скажите пожалуйста где я не прав и/или что мне нужно сделать что бы это заработало.

Отредактировано пользователем 16 января 2013 г. 15:00:29(UTC)
 | Причина: Не указана


Вверх


Offline

Максим Коллегин

 


#2
Оставлено
:

16 января 2013 г. 15:43:00(UTC)

Максим Коллегин

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

Группы: Администраторы

Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,281
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 21 раз
Поблагодарили: 673 раз в 593 постах

Открывать криптопровайдер по сертификату без связи с закрытым ключом — плохая идея. На Windows работает из-за магических key identifier — на Linux мы это не реализовывали.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

ahtoh

 


#3
Оставлено
:

16 января 2013 г. 16:19:34(UTC)

ahtoh

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

Группы: Участники

Зарегистрирован: 23.09.2011(UTC)
Сообщений: 17

На Windows в CAPI есть метод CryptFindCertificateKeyProvInfo, на Linux я его не нашел, подскажите пожалуйста как мне его реализовать.


Вверх


Offline

Максим Коллегин

 


#4
Оставлено
:

16 января 2013 г. 16:34:30(UTC)

Максим Коллегин

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

Группы: Администраторы

Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,281
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 21 раз
Поблагодарили: 673 раз в 593 постах

Перечислить криптопровайдеры, в каждом криптопровайдере перечислить контейнеры и сравнить открытые ключи.

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

miser

 


#5
Оставлено
:

25 марта 2013 г. 16:04:01(UTC)

miser

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

Группы: Участники

Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах

Продолжу тему.
Читаю список сертификатов с закрытыми ключами из хранилища «MY»

Цитата:

$ ./certmgr -list
Certmgr 1.0 (c) «CryptoPro», 2007-2010.
program for managing certificates, CRLs and stores

=============================================================================
1——-
Issuer : OGRN=

PrivateKey Link : Yes. Container: HDIMAGE\RaUser-8.0002EA1
=============================================================================

[ErrorCode: 0x00000000]

Попытка получить название контейнера выдает ошибку «The parameter is incorrect.»

Код:


while ((pCertContext = CertEnumCertificatesInStore(hCertStore, pCertContext)) != NULL) {
    HCRYPTPROV hCryptProv;

    if(CryptAcquireCertificatePrivateKey(pCertContext, 0, NULL,
          &hCryptProv, &dwKeySpec, &bCallerFreeProv)) {

        CryptGetProvParam(hCryptProv,
            PP_CONTAINER, (BYTE *)pbData, &cbData, 0))
    }
}

Неужели, надо бегать через получение списка всех контейнеров?

CryptGetProvParam(hCryptProv, PP_ENUMCONTAINERS, pbData, &cbData, dwFlags)


Вверх


Offline

Андрей Писарев

 


#6
Оставлено
:

25 марта 2013 г. 16:33:29(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Цитата:

(BYTE *)pbData — ?

сначала null, чтобы узнать размер,
выделить нужный размер…
потом повторный вызов CryptGetProvParam с выделенным буфером …

Отредактировано пользователем 25 марта 2013 г. 16:35:20(UTC)
 | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

miser

 


#7
Оставлено
:

26 марта 2013 г. 12:07:17(UTC)

miser

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

Группы: Участники

Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах

Спасибо, частично разобрался.
Есть еще очень интересная ситуация с исследуемым ключиком.

Получаю сертификат из контейнера:

Цитата:

$ ./certmgr -list -cont ‘HDIMAGE\RaUser-8.0002EA1’
Certmgr 1.0 (c) «CryptoPro», 2007-2010.
program for managing certificates, CRLs and stores

=============================================================================
1——-
Issuer : OGRN=…
Subject : … CN=Тест Тестович Тестов …

Not valid before: 05/03/2013 07:33:00 UTC
Not valid after : 05/05/2013 07:43:00 UTC
PrivateKey Link : Certificate from container. No link to key
=============================================================================

Тестирую контейнер:

Цитата:

$ ./csptest -keyset -cont ‘HDIMAGE\RaUser-8.0002EA1’ –check
CSP (Type:75) v3.6.5363 KC1 Release Ver:3.6.7363 OS:Linux CPU:AMD64 FastCode:READY:SSSE3.
AcquireContext: OK. HCRYPTPROV: 36359875
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: «RaUser-88aa46a2-633f-4f6c-a847-75e6e8cc759c»
Signature key is not available.
Exchange key is available. HCRYPTKEY: 0x2323b13
Keys in container:
exchange key
Total:
[ErrorCode: 0x00000000]

Интересно, показывает, что ключа для подписи нет.
Проверяем подписывание

Цитата:

$ /opt/cprocsp/bin/amd64/csptestf -sfsign -sign -in test.xml -out test.p7b -add -my ‘Тест Тестович Тестов’
#0:
Subject: … CN=Тест Тестович Тестов …

PrivKey: 05.03.2013 07:33:00 — 05.05.2013 07:33:00 (UTC)

A CSP has been acquired.
Source message length: 8870
Calculated signature (or signed message) length: 11896
Signature was done. Signature (or signed message) length: 11896
Output file (test.p7b) has been saved
Total:
[ErrorCode: 0x00000000]

На предыдущем шаге, другой компонент показал, что ключа для подписи нет!

JCP показывает, что сертификат используется для подписывания и авторизации.
JCP подписывает этим сертификатом.

Пишу на С код

Код:


HCRYPTPROV hCryptProv = (HCRYPTPROV) NULL;
HCRYPTKEY hCryptKey = (HCRYPTKEY) NULL;

CryptAcquireContext(&hCryptProv, "HDIMAGE\\RaUser-8.000\2EA1", NULL, 75, 0);
CryptGetUserKey(hCryptProv, AT_SIGNATURE, &hCryptKey);

На последней строке падает ошибка

Цитата:

Error number : 0x8009000d
Error description: Error during CryptGetUserKey for signkey.

Вопрос. Почему csptest и мой код не дают подписывать данные, а csptestf и JCP подписывают?


Вверх


Offline

Андрей Писарев

 


#8
Оставлено
:

26 марта 2013 г. 12:15:16(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

вместо AT_SIGNATURE использовать Exchange …

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

miser

 


#9
Оставлено
:

26 марта 2013 г. 13:32:51(UTC)

miser

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

Группы: Участники

Зарегистрирован: 14.03.2011(UTC)
Сообщений: 152
Мужчина
Откуда: Санкт-Петербург

Сказал «Спасибо»: 1 раз
Поблагодарили: 7 раз в 5 постах

В данном примере, это выход.
Получается, что если AT_SIGNATURE дало ошибку, надо попробовать взять AT_KEYEXCHANGE.

Код:


// Получение закрытого ключа подписи
DWORD providerImpl = AT_SIGNATURE;
if(! CryptGetUserKey(hCryptProv, providerImpl, &hCryptKey)) {
    providerImpl = AT_KEYEXCHANGE;
    CryptGetUserKey(hCryptProv, providerImpl, &hCryptKey);
}
// Определение размера подписи и распределение памяти.
DWORD dwSigLen
CryptSignHash(hCryptHash, providerImpl, NULL, dwFlags, NULL, &dwSigLen);

Как-то не очень.

В примерах производителя такого грязного кода нет.


Вверх


Offline

Андрей Писарев

 


#10
Оставлено
:

26 марта 2013 г. 13:46:19(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Автор: miser Перейти к цитате

В данном примере, это выход.
Получается, что если AT_SIGNATURE дало ошибку, надо попробовать взять AT_KEYEXCHANGE.

Код:


// Получение закрытого ключа подписи
DWORD providerImpl = AT_SIGNATURE;
if(! CryptGetUserKey(hCryptProv, providerImpl, &hCryptKey)) {
    providerImpl = AT_KEYEXCHANGE;
    CryptGetUserKey(hCryptProv, providerImpl, &hCryptKey);
}
// Определение размера подписи и распределение памяти.
DWORD dwSigLen
CryptSignHash(hCryptHash, providerImpl, NULL, dwFlags, NULL, &dwSigLen);

Как-то не очень.

В примерах производителя такого грязного кода нет.

Почему грязного? Anxious

Отредактировано пользователем 26 марта 2013 г. 13:48:58(UTC)
 | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.


Offline

Pichugin

 


#1
Оставлено
:

29 сентября 2022 г. 16:55:41(UTC)

Pichugin

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

Группы: Участники

Зарегистрирован: 17.09.2020(UTC)
Сообщений: 3
Российская Федерация
Откуда: Ростов-на-Дону

Добрый день.

Работаю с ГИС ЖКХ. КриптоПро версии 4.0.9969 используется для подписания запросов, а stunnel из комплекта КриптоПро для установки защищенного соединения.
Получил новый сертификат в связи с истечением старого и не могу добиться его работы в том же окружении.
Сертификат установил, с его помощью успешно подписываются запросы.
Но stunnel не хочет с ним работать.

Изначальный конфиг stunnel

Для него выдает ошибку **** Error 0x80090304 returned by AcquireCredentialsHandle

Нашел на форуме совет добавить в конфиг строчку pincode=12345678
После этого возникает ошибка CryptAcquireCertificatePrivateKey failed. Error = 0x80090016

Прошу совета в решении возникшей проблемы.


Вверх


Offline

Pichugin

 


#2
Оставлено
:

5 октября 2022 г. 13:40:52(UTC)

Pichugin

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

Группы: Участники

Зарегистрирован: 17.09.2020(UTC)
Сообщений: 3
Российская Федерация
Откуда: Ростов-на-Дону

Все еще не могу решить проблему. Прошу помощи.
Пробовал:
— Переустанавливал сертификат
— Обновил КриптоПро до версии 5.0.11455
— Установил stunnel-msspi
— Сохранял сертификат в формате Х.509 в кодировке Base-64

Использую Windows 7, служба stunnel запускается от имени того же пользователя, под которым установлен сертификат.

Файл конфигурации stunnel:

Код:

output=C:stunnelstunnel.log
socket=l:TCP_NODELAY=1
socket=r:TCP_NODELAY=1
debug=7

[https]
client=yes
accept=127.0.0.1:8080
connect=api.dom.gosuslugi.ru:443
cert=C:stunnelclient.cer
pincode=12345678
verify=0

При использовании stunnel.x64.exe возникает ошибка
CryptAcquireCertificatePrivateKey failed. Error = 0x8009001a,
а при сохранении в формате Base-64
CertCreateCertificateContext(der) failed: 2148086027d. Trying certificate as base64
и после этого записей в логе нет, похоже процесс подвисает.

При использовании stunnel-msspi.exe возникает ошибка
msspi: msspi_set_mycert_options failed (cert = «C:stunnelclient.cer», pin = «12345678»)
одинаковая для форматов DER и Base-64. При этом процесс не зависает, лог пишется полностью.

Лог файл для stunnel-msspi.exe:

Код:

2022.10.05 12:01:00 LOG6[service]: Initializing inetd mode configuration
2022.10.05 12:01:00 LOG7[service]: Running on Windows 6.1
2022.10.05 12:01:00 LOG7[service]: No limit detected for the number of clients
2022.10.05 12:01:00 LOG5[service]: stunnel 5.65 on x86-pc-msvc-1900 platform
2022.10.05 12:01:00 LOG5[service]: Compiled without OPENSSL
2022.10.05 12:01:00 LOG5[service]: Threading:WIN32 Sockets:SELECT,IPv6 TLS:OCSP,SNI
2022.10.05 12:01:00 LOG7[service]: errno: (*_errno())
2022.10.05 12:01:00 LOG6[service]: Initializing inetd mode configuration
2022.10.05 12:01:00 LOG7[service]: Running on Windows 6.1
2022.10.05 12:01:00 LOG5[service]: Reading configuration from file c:stunnelstunnel.conf
2022.10.05 12:01:00 LOG5[service]: UTF-8 byte order mark not detected
2022.10.05 12:01:00 LOG6[service]: Initializing service [https]
2022.10.05 12:01:00 LOG5[service]: Configuration successful
2022.10.05 12:01:00 LOG7[service]: Deallocating deployed section defaults
2022.10.05 12:01:00 LOG7[service]: Binding service [https]
2022.10.05 12:01:00 LOG7[service]: Listening file descriptor created (FD=440)
2022.10.05 12:01:00 LOG7[service]: Setting accept socket options (FD=440)
2022.10.05 12:01:00 LOG7[service]: Option SO_EXCLUSIVEADDRUSE set on accept socket
2022.10.05 12:01:00 LOG6[service]: Service [https] (FD=440) bound to 127.0.0.1:8080
2022.10.05 12:01:14 LOG7[service]: Found 1 ready file descriptor(s)
2022.10.05 12:01:14 LOG7[service]: FD=400 ifds=r-x ofds=---
2022.10.05 12:01:14 LOG7[service]: FD=440 ifds=r-x ofds=r--
2022.10.05 12:01:14 LOG7[service]: Service [https] accepted (FD=448) from 127.0.0.1:49394
2022.10.05 12:01:14 LOG7[service]: Creating a new thread
2022.10.05 12:01:14 LOG7[service]: New thread created
2022.10.05 12:01:14 LOG7[0]: Service [https] started
2022.10.05 12:01:14 LOG7[0]: Setting local socket options (FD=448)
2022.10.05 12:01:14 LOG7[0]: Option TCP_NODELAY set on local socket
2022.10.05 12:01:14 LOG5[0]: Service [https] accepted connection from 127.0.0.1:49394
2022.10.05 12:01:14 LOG6[0]: s_connect: connecting 217.107.108.116:443
2022.10.05 12:01:14 LOG7[0]: s_connect: s_poll_wait 217.107.108.116:443: waiting 10 seconds
2022.10.05 12:01:14 LOG7[0]: FD=464 ifds=rwx ofds=---
2022.10.05 12:01:14 LOG5[0]: s_connect: connected 217.107.108.116:443
2022.10.05 12:01:14 LOG5[0]: Service [https] connected remote server from 192.168.1.17:49395
2022.10.05 12:01:14 LOG7[0]: Setting remote socket options (FD=464)
2022.10.05 12:01:14 LOG7[0]: Option TCP_NODELAY set on remote socket
2022.10.05 12:01:14 LOG7[0]: Remote descriptor (FD=464) initialized
2022.10.05 12:01:14 LOG6[0]: msspi: try open cert = "C:stunnelclient.cer" as file
2022.10.05 12:01:14 LOG3[0]: msspi: msspi_set_mycert_options failed (cert = "C:stunnelclient.cer", pin = "12345678")
2022.10.05 12:01:14 LOG5[0]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket
2022.10.05 12:01:14 LOG7[0]: Remote descriptor (FD=464) closed
2022.10.05 12:01:14 LOG7[0]: Local descriptor (FD=448) closed
2022.10.05 12:01:14 LOG7[0]: Service [https] finished (0 left


Вверх


Offline

Михаил Селезнёв

 


#3
Оставлено
:

5 октября 2022 г. 14:24:55(UTC)

Михаил Селезнёв

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

Группы: Участники

Зарегистрирован: 05.04.2017(UTC)
Сообщений: 357
Мужчина
Российская Федерация

Сказал «Спасибо»: 3 раз
Поблагодарили: 49 раз в 49 постах

Добрый день!
Надо разбираться, просьба создать обращение на Портале ТП: https://support.cryptopro.ru/


Вверх


Offline

pavlovskiy.an

 


#4
Оставлено
:

7 ноября 2022 г. 14:38:02(UTC)

pavlovskiy.an

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

Группы: Участники

Зарегистрирован: 07.11.2022(UTC)
Сообщений: 2
Российская Федерация

Добрый день!

Аналогичная проблема, после истечения срока сертификата тензора с заменой на ФНС, такая вот история

2022.11.07 19:32:19 LOG7[4220:4304]: https accepted FD=144 from 127.0.0.1:57080
2022.11.07 19:32:19 LOG7[4220:4304]: Creating a new thread
2022.11.07 19:32:19 LOG7[4220:4304]: New thread created
2022.11.07 19:32:19 LOG7[4220:2596]: client start
2022.11.07 19:32:19 LOG7[4220:2596]: https started
2022.11.07 19:32:19 LOG7[4220:2596]: FD 144 in non-blocking mode
2022.11.07 19:32:19 LOG7[4220:2596]: TCP_NODELAY option set on local socket
2022.11.07 19:32:19 LOG5[4220:2596]: https connected from 127.0.0.1:57080
2022.11.07 19:32:19 LOG7[4220:2596]: FD 644 in non-blocking mode
2022.11.07 19:32:19 LOG7[4220:2596]: https connecting
2022.11.07 19:32:19 LOG7[4220:2596]: connect_wait: waiting 10 seconds
2022.11.07 19:32:19 LOG7[4220:2596]: connect_wait: connected
2022.11.07 19:32:19 LOG7[4220:2596]: Remote FD=644 initialized
2022.11.07 19:32:19 LOG7[4220:2596]: TCP_NODELAY option set on remote socket
2022.11.07 19:32:19 LOG7[4220:2596]: start SSPI connect
2022.11.07 19:32:19 LOG5[4220:2596]: try to read the client certificate
2022.11.07 19:32:19 LOG7[4220:2596]: open file C:Stunnelclicer.cer with certificate
2022.11.07 19:32:19 LOG5[4220:2596]: CertFindCertificateInStore not find client certificate in store CURRENT_USER. Looking at LOCAL_MACHINE
2022.11.07 19:32:19 LOG5[4220:2596]: pincode option is present. Call CryptSetProvParam
2022.11.07 19:32:19 LOG3[4220:2596]: CryptAcquireCertificatePrivateKey failed. Error = 0x80090016
2022.11.07 19:32:19 LOG3[4220:2596]: Error creating credentials
2022.11.07 19:32:19 LOG5[4220:2596]: Connection reset: 0 bytes sent to SSL, 0 bytes sent to socket
2022.11.07 19:32:19 LOG7[4220:2596]: free Buffers
2022.11.07 19:32:19 LOG5[4220:2596]: incomp_mess = 0, extra_data = 0
2022.11.07 19:32:19 LOG7[4220:2596]: https finished (0 left)

Нашлось решение?


Вверх


Offline

Pichugin

 


#5
Оставлено
:

8 ноября 2022 г. 22:35:48(UTC)

Pichugin

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

Группы: Участники

Зарегистрирован: 17.09.2020(UTC)
Сообщений: 3
Российская Федерация
Откуда: Ростов-на-Дону

Мне в конце концов помог переход на windows 10 и КриптоПро 5.


Вверх


Offline

Андрей *

 


#6
Оставлено
:

8 ноября 2022 г. 22:41:57(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,987
Мужчина
Российская Федерация

Сказал «Спасибо»: 457 раз
Поблагодарили: 1905 раз в 1474 постах

Автор: pavlovskiy.an Перейти к цитате

Добрый день!

Аналогичная проблема, после истечения срока сертификата тензора с заменой на ФНС, такая вот история

2022.11.07 19:32:19 LOG7[4220:4304]: https accepted FD=144 from 127.0.0.1:57080
2022.11.07 19:32:19 LOG7[4220:4304]: Creating a new thread
2022.11.07 19:32:19 LOG7[4220:4304]: New thread created
2022.11.07 19:32:19 LOG7[4220:2596]: client start
2022.11.07 19:32:19 LOG7[4220:2596]: https started
2022.11.07 19:32:19 LOG7[4220:2596]: FD 144 in non-blocking mode
2022.11.07 19:32:19 LOG7[4220:2596]: TCP_NODELAY option set on local socket
2022.11.07 19:32:19 LOG5[4220:2596]: https connected from 127.0.0.1:57080
2022.11.07 19:32:19 LOG7[4220:2596]: FD 644 in non-blocking mode
2022.11.07 19:32:19 LOG7[4220:2596]: https connecting
2022.11.07 19:32:19 LOG7[4220:2596]: connect_wait: waiting 10 seconds
2022.11.07 19:32:19 LOG7[4220:2596]: connect_wait: connected
2022.11.07 19:32:19 LOG7[4220:2596]: Remote FD=644 initialized
2022.11.07 19:32:19 LOG7[4220:2596]: TCP_NODELAY option set on remote socket
2022.11.07 19:32:19 LOG7[4220:2596]: start SSPI connect
2022.11.07 19:32:19 LOG5[4220:2596]: try to read the client certificate
2022.11.07 19:32:19 LOG7[4220:2596]: open file C:Stunnelclicer.cer with certificate
2022.11.07 19:32:19 LOG5[4220:2596]: CertFindCertificateInStore not find client certificate in store CURRENT_USER. Looking at LOCAL_MACHINE
2022.11.07 19:32:19 LOG5[4220:2596]: pincode option is present. Call CryptSetProvParam
2022.11.07 19:32:19 LOG3[4220:2596]: CryptAcquireCertificatePrivateKey failed. Error = 0x80090016
2022.11.07 19:32:19 LOG3[4220:2596]: Error creating credentials
2022.11.07 19:32:19 LOG5[4220:2596]: Connection reset: 0 bytes sent to SSL, 0 bytes sent to socket
2022.11.07 19:32:19 LOG7[4220:2596]: free Buffers
2022.11.07 19:32:19 LOG5[4220:2596]: incomp_mess = 0, extra_data = 0
2022.11.07 19:32:19 LOG7[4220:2596]: https finished (0 left)

Нашлось решение?

CryptAcquireCertificatePrivateKey failed. Error = 0x80090016
набор ключей не существует

А что Вы сделали после получения нового сертификата? Просто заменили файл с сертификатом?
И дополнительно.. «добавили в Личное текущего компьютера» без связи с контейнером…?

Его необходимо установить через панель управления КриптоПРО CSPСервисУстановить личный сертификат…

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


Offline

pavlovskiy.an

 


#7
Оставлено
:

9 ноября 2022 г. 4:38:12(UTC)

pavlovskiy.an

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

Группы: Участники

Зарегистрирован: 07.11.2022(UTC)
Сообщений: 2
Российская Федерация

Конечно серт установлен в личные и экспортирован в директорию стунеля. Стунель крутится на отдельном скл и сервере1с (rphost), к которому пользователи не подключаются, а работают в терминале, на котором просто 1с предприятие, т.е два сервера. Связать с контейнером можно, если он в реестре или на флэшке/рутокене подсоединённом к машине с стунелем. Т.к. ключ ФНС можно только ставить и работать, скопировать его нельзя — в этом была вся засада. Проблему решил. Можно вопрос закрыть.


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

I’ve created a self-signed certificate in Key Vault using the managed certificates features there and am trying to use that certificate in my fabric application. This smells similar to #235 but the HRESULT is different (0x80090016 instead of 0x80090014). I see the following in my event log:

  • Event 256: Can’t get private key filename for certificate. Error: 0x80090016
  • Event 257: All tries to get private key filename failed.
  • Event 256: CryptAcquireCertificatePrivateKey failed. Error:0x80090016
  • Event 256: Failed to get the Certificate’s private key. Thumbprint:E2ADCA7A99BE1481EF4AE0020B0D23AE43C62E68. Error: E_FAIL
  • Event 256: Failed to get private key file. x509FindValue: E2ADCA7A99BE1481EF4AE0020B0D23AE43C62E68, x509StoreName: My, findType: FindByThumbprint, Error E_FAIL
  • Event 23041: ACLing private key filename for thumbprint E2ADCA7A99BE1481EF4AE0020B0D23AE43C62E68. ErrorCode=E_FAIL

Repro steps

  1. Create a new self-signed certificate using the managed certificate features of Key Vault
  2. Export the certificate from Key Vault using Get-AzureKeyVaultSecret
  3. Import the certificate into cert:/LocalMachine/My
  4. Create an application that relies on the certificate via <SecretsCertificate> in ApplicationManifest.xml
  5. Deploy the application
  6. Application fails to provision/start on the cluster

Things I’ve tried

  1. When imported to LocalMachine/My from Key Vault, it is using «Microsoft Enhanced RSA and AES Cryptographic Provider» so I converted it to use «Microsoft Enhanced Cryptographic Provider v1.0». This didn’t help. The same errors show up in the event log.
  2. Executing my code as an administrator outside the context of a service fabric application. This works; my code is able to load the cert and use it for AAD authentication. At least I know the cert was generated properly.
  3. Running the service as LocalSystem and not referencing the cert in ApplicationManifest.xml. This doesn’t work; the service is unable to get the private key when it comes time to do so.
  4. Manually ACL’ing the cert to allow access to the private key to NETWORK SERVICE (using mmc.exe), running the service as NetworkService and not referencing the cert in ApplicationManifest.xml. This doesn’t work; the service is unable to get the private key when it comes time to do so.
  5. Manually ACL’ing the cert to allow access to the private key to LOCAL SERVICE (using mmc.exe), running the service as LocalService and not referencing the cert in ApplicationManifest.xml. This doesn’t work; the service is unable to get the private key when it comes time to do so.

Ошибка 0x80090016 «Неправильный зарегистрированный набор ключей» или ошибка обращения к контейнеру закрытого ключа «Набор ключей не существует» может появиться по различным причинам. У нас она появилась после обновления КриптоПро с 4 до 5 версии на MacOS. В этой статье мы расскажем, как устранить эту ошибку. Думаем, наши инструкции будут актуальны как для пользователей MacOS, так и для Windows. Если у вас не получается устранить данную ошибку, то рекомендуем обратиться к нашим специалистам за помощью.

  1. Извлеките носитель с ЭЦП из устройства. Это необходимо, чтобы исключить влияние носителя ЭЦП и закрытого контейнера с ключами на работу КриптоПро.
  2. Удалите установленный сертификат ЭЦП, с которым возникает проблема, из личного хранилища сертификатов.
  3. Вставьте носитель с ЭЦП в устройство. Иногда может возникать проблема с отображением контейнера в КриптоПро. В этом случае извлеките носитель с ЭЦП и вставьте в другой порт устройства.
  4. Установите сертификат вашей электронной подписи повторно.

Как установить сертификат электронной подписи? Инструкция.

Если сертификат ЭЦП удалили, а установить повторно не получается.

В большинстве случаев после указанных действий ошибка 0x80090016 «Неправильный зарегистрированный набор ключей» или ошибка обращения к контейнеру закрытого ключа «Набор ключей не существует» отображаться не будет. Однако если ошибка преследует вас, можно полностью удалить КриптоПро и установить его заново.

Как удалить КриптоПро и следы его использования из реестра Windows?

Если ошибка 0x80090016 продолжает появляться и ничего не помогло.

4 простых решения для исправления кода ошибки 0x80090016 в Windows 10/11

Ошибка 0x80090016 может возникнуть у пользователей, когда они пытаются настроить PIN-коды Windows 10 или войти с ними. В сообщении об ошибке говорится:

Нам не удалось установить ваш PIN-код. Иногда полезно попробовать еще раз или вы можете пропустить это сейчас и сделать это позже.

Если вам нужно исправить это, чтобы настроить PIN-код в Windows 10, ознакомьтесь с этими потенциальными решениями для ошибки 0x80090016.

Основной причиной возникновения этой ошибки является определенная системная папка, которая может быть повреждена и заблокировать настройку PIN-кода на вашем устройстве.

Многие пользователи сообщали о соответствующих сообщениях об ошибках, когда пытались получить доступ или установить пароль для своих учетных записей Microsoft.

Что такое код ошибки 0x80090016?

Сообщение об ошибке 0x80090016 появляется на устройствах Windows, когда вы пытаетесь установить защитный PIN-код и заблокировать свое устройство.

Эта конкретная проблема также может возникнуть при использовании Microsoft Store и попытке войти в свою учетную запись.

Вы можете столкнуться с проблемой такого типа после выполнения системных обновлений на своем ПК и повреждения папки NGC.

Эта проблема может оставить ваш компьютер незащищенным от любого пользователя, который приблизится к вашему устройству, и, таким образом, поставить под угрозу ваши личные данные.

Как исправить ошибку Windows 0x80090016?

1. Запустите проверку системных файлов

  • Сначала попробуйте выполнить сканирование с помощью средства проверки системных файлов. Нажмите Windows + R, чтобы запустить Run.
  • Введите cmd в поле «Выполнить».
  • Нажмите комбинацию Ctrl + Shift + Enter, чтобы открыть командную строку с повышенными привилегиями.
  • Хотя это и не всегда необходимо, рекомендуется сначала запустить сканирование образа развертывания. Для этого введите: DISM.exe /Online /Cleanup-image /Restorehealth
  • Нажмите «Ввод».
  • Затем введите sfc /scannow в командной строке и нажмите клавишу Enter.

  • Подождите, пока сканирование SFC сделает свое дело, а затем перезапустите Windows, если оно восстанавливает файлы.

2. Очистите папку NGC

Очистка папки NGC, владельцем которой вы должны стать, является одним из наиболее подтвержденных исправлений ошибки 0x80090016.

  • Сначала нажмите комбинацию Windows + E key, которая открывает проводник. Установите флажок «Скрытые элементы» на вкладке «Вид».

  • Затем откройте путь к этой папке в Проводнике: C: > Windows > ServiceProfiles > LocalService > AppData > Local > Microsoft.
  • Затем щелкните правой кнопкой мыши папку NGC, чтобы выбрать «Свойства».
  • Выберите вкладку «Безопасность» в открывшемся окне.

  • Нажмите «Дополнительно», чтобы открыть окно, показанное на снимке экрана ниже.

  • Затем нажмите «Изменить», чтобы открыть окно «Выбор пользователя или группы».

  • Введите имя учетной записи пользователя для той, в которую вы вошли в данный момент.
  • Нажмите кнопку Проверить имена.
  • Нажмите кнопку ОК.
  • Выберите параметр Заменить владельца подконтейнеров и объектов.
  • Выберите опцию Применить.
  • Нажмите OK, чтобы закрыть окно.
  • Откройте подпапку NGC.
  • Нажмите Ctrl + A, чтобы выбрать все его содержимое.
  • Нажмите кнопку «Удалить» на вкладке «Главная».

3. Включите Включить удобный вход с помощью PIN-кода.

Пользователи могут исправить ошибку 0x80090016 с помощью редактора групповой политики в Windows 10 Pro и Enterprise.

  • Для этого введите gpedit.msc в «Выполнить»; и нажмите кнопку ОК.

  • Разверните узел Конфигурация компьютера на панели навигации редактора групповой политики.
  • Затем нажмите «Административные шаблоны», «Система» и «Вход в систему» ​​в левой части окна.
  • Дважды щелкните Включить удобный вход с помощью PIN-кода на правой панели в редакторе групповой политики.

  • Выберите переключатель Включено.
  • Нажмите кнопку Применить, чтобы сохранить настройку.
  • Нажмите кнопку OK, чтобы выйти из окна.

4. Откат Windows

Ошибка 0x80090016 также может быть связана с недавно установленным сторонним программным обеспечением, которое вы удаляете, восстанавливая Windows до точки восстановления. Для этого ознакомьтесь с публикацией о восстановлении системы, в которой содержатся рекомендации по откату Windows.

Выбор точки восстановления, которая идет дальше, скорее всего, устранит ошибку, так как будет удалено больше программного обеспечения.

Это некоторые из подтвержденных разрешений, с которыми пользователи исправили ошибку PIN-кода 0x80090016. Таким образом, приведенные выше решения обычно решают проблему.

Обратите внимание, что приведенные выше разрешения не относятся к ошибке Microsoft Store, которая имеет тот же код 0x80090016.

Дайте нам знать, какие из них работали лучше всего для вас, оставив нам сообщение в разделе комментариев ниже.

Понравилась статья? Поделить с друзьями:
  • Ошибка эцп 0x800b010a
  • Ошибка эцп 0x80090010
  • Ошибка эффективность основного нейтрализатора блок 1 ниже порога
  • Ошибка эффективность нейтрализатора ниже порога приора
  • Ошибка эррор 400