Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

Пока не за что.
"Насильственно" - это игнорируя ошибку при получении свойств ключевой пары контейнера (которая проявляется у Вас), и игнорируя тот факт что открытые ключи в сертификате и в контейнере не совпадают (а точнее отличаются на один бит), и только программно. Возможно, этот функционал будет добавлен в Cert2Cont - но только после обсуждения данного вопроса с КриптоПро. Неизветсно, насколько это правильно, и чем может обернуться.

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

А насколько правильно выпускать сертификаты не соответствующие открытому ключу в контейнере?

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

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

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

MKurskiy пишет:

открытый ключ в контейнере на один бит отличается от открытого ключа в сертификате.

Традиционная грабля не удалением пробелов и cr-ов на вводе?

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

Задайте вопрос корректно. Совершенно не ясно, что Вы имеете ввиду.

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

MKurskiy пишет:

Пока не за что.
"Насильственно" - это игнорируя ошибку при получении свойств ключевой пары контейнера (которая проявляется у Вас), и игнорируя тот факт что открытые ключи в сертификате и в контейнере не совпадают (а точнее отличаются на один бит), и только программно. Возможно, этот функционал будет добавлен в Cert2Cont - но только после обсуждения данного вопроса с КриптоПро. Неизветсно, насколько это правильно, и чем может обернуться.

Был немного переделан механизм сравнения открытых ключей из сертификата с ключом из контейнера.
Теперь, если служебная информация в заголовке одного открытого ключа не совпадает с служебной информацией из заголовка другого ключа, а сами ключи при этом совпадают, то импорт утилитой Cert2Cont будет произведен корректно, без ошибок.

Более подробно механизм утилиты описан в ReadMe.txt к утилите, и некоторая одполнительная информация содержиться в ветке форума: https://forum.rutoken.ru/viewtopic.php?id=22

Михаил Курский
Руководитель отдела разработки прикладного ПО Rutoken, Компания "Актив"

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

MKurskiy пишет:

Пока не за что.
"Насильственно" - это игнорируя ошибку при получении свойств ключевой пары контейнера (которая проявляется у Вас), и игнорируя тот факт что открытые ключи в сертификате и в контейнере не совпадают https://forum.rutoken.ru/viewtopic.php?id=22

Михаил, мне необходимо насильственно поместить сертификат в контейнер (контейнер удален по ошибке), не получается. Что в коде не так. Писал на основе исходников Cert2Cont

Рутокен L 64K080Z
Мне необходимо положить в контейнер с ключами обмена сертификат.
Сертификат не соответствует паре, экспортирован из контейнера, затем контейнер (по ошибке ) удален и создана ключевая пара обмена ключей в контейнере с тем же именем.
все процедуры генерации, экспорта, подписи, верификации работают.
помогите кто может
CryptSetKeyParam
возвращает
System Error. Code: -2146893819.
Плохие данные
0000047E


function ImportCert(cont, path: string): Boolean;
var
hProv: HCRYPTPROV;
SignKey: HCRYPTKEY;
cert: TMemoryStream;
db: TStringList;
l: Cardinal;
begin
cert := TMemoryStream.Create;
cert.LoadFromFile(path);//загружаю сохраненный сертификат *.cer
Result := False;
try
if not CryptAcquireContext(@hProv, PChar(cont), prov, PROV_GOST_2001_DH, 0)
then
Exit;
if not CryptGetUserKey(hProv, AT_KEYEXCHANGE, @SignKey) then
Exit;
if not CryptSetKeyParam(SignKey, KP_CERTIFICATE, cert.Memory, 0) then
Exit;
Result := true;
finally
// уничтожаем ключ
CryptDestroyKey(SignKey);
// освобождает дескриптор криптопровайдера
CryptReleaseContext(hProv, 0);
cert.Free;
end;
end;

Re: Кто нибудь пробовал поместить сертификат формата cer на рутокет

Добрый день.
Открытый ключ сертификата должен совпадать с открытым ключом пары контейнера.
Иначе абсурд получается. Подпись без закрытого ключа работать не будет.
Таким образом, если у вас есть дубликат ключа – восстановите его, если нет, по всей видимости, нужно выписывать новый сертификат с парой.