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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Lers  
#1 Оставлено : 19 августа 2010 г. 16:06:04(UTC)
Lers

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

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

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

Формирую ЭЦП при помощи CAPICOM. У вас приведено в примерах как получить установленный на компьютере сертификат для подписи текста. Но хотелось бы внедрить сертификат (выданный вами cer-файл) в программу, а не устанавливать его на компьютере. Возможно ли это?

Попробовал реализовать идею (см. код на C# ниже), но при вызове метода CAPICOM::SignedData::Sign() появляется ошибка №80880253 "The signer's certificate is not valid for signing".
Возможно, проблема в том, что не получается связать сертификат с закрытым ключом? Если так, то что требуется добавить/исправить в коде?

Код:

// Преобразуем массив байт к CertificateClass
byte[] myCert = Properties.Resources.Certificate;	// Мой сертификат (cer-файл), выданный вами

CAPICOM.CertificateClass cer = new CAPICOM.CertificateClass();
cer.Import(myCert);

CAPICOM.Signer signer = new CAPICOM.Signer();
signer.Certificate = cer;
CAPICOM.SignedData signedData = new CAPICOM.SignedData();
signedData.Content = content;			// Массив байт для подписи
byte[] signed = signedData.Sign(signer, true, CAPICOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BINARY);

Примечание: код написан на C# с использованием модифицированной вами Interop.CAPICOM.dll (ссылка). При использовании стандартной Interop.CAPICOM.dll, требуется преобразование массива байт через CAPICOM::UtilitiesClass::ByteArrayToBinaryString()
Offline Kirill Sobolev  
#2 Оставлено : 19 августа 2010 г. 17:46:07(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Как вариант - каждый раз создавать хранилище в памяти и связывать сертификат с закрытым ключем. Без такой привязки подпись работать не будет, а сделать ее можно только для установленного сертификата.
Техническую поддержку оказываем тут
Наша база знаний
Offline Lers  
#3 Оставлено : 20 августа 2010 г. 7:52:26(UTC)
Lers

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

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

Я поясню, что хотел выяснить:
1. Можно ли в принципе формировать подпись НЕ устанавливая сертификат (CER-файл) в системе, а читая его каждый раз из файла или ресурсов программы во время выполнения?
2. Если да, то как?

Kirill Sobolev написал:
Как вариант - каждый раз создавать хранилище в памяти и связывать сертификат с закрытым ключем.

Как видно из моего примера я уже создаю класс с сертификатом в памяти (CAPICOM.CertificateClass). Как его можно связать с закрытым ключом? Скажите хотя бы, можно ли это сделать через CAPICOM или надо опускаться до CryptoAPI?

Kirill Sobolev написал:
Без такой привязки подпись работать не будет, а сделать ее можно только для установленного сертификата.

Я так и не понял. Можно ли формировать подпись НЕ устанавливая сертификат (CER-файл) в системе, а читая его каждый раз из файла или ресурсов программы во время выполнения? Исходя из первого предложения, это сделать можно, а во втором предложении пишите, что нельзя.
Offline Kirill Sobolev  
#4 Оставлено : 20 августа 2010 г. 14:38:03(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
1. Можно.
2. Через CAPICOM однозначно нет, черз CryptoAPI да, может быть можно через .NET. обсуждение.
Можно упростить схему - сохранять не только сертификат, а сертификат с ссылкой на ключ (хранилище SST). Тогда не нужно будет каждый раз создавать привязку.
Цитата:
а во втором предложении пишите, что нельзя.

Читайте внимательнее, я нигде такого не писал.
Техническую поддержку оказываем тут
Наша база знаний
Offline IvanIV  
#5 Оставлено : 13 апреля 2012 г. 13:32:25(UTC)
IvanIV

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

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

Подскажите пожалуста как можно создать SST хранилище
Offline Kirill Sobolev  
#6 Оставлено : 13 апреля 2012 г. 14:15:27(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Техническую поддержку оказываем тут
Наша база знаний
Offline Ikor  
#7 Оставлено : 23 апреля 2012 г. 20:30:40(UTC)
Ikor

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

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

Lers написал:

1. Можно ли в принципе формировать подпись НЕ устанавливая сертификат (CER-файл) в системе, а читая его каждый раз из файла или ресурсов программы во время выполнения?

Можно даже через CAPICOM. Нужно экспортировать сертификат в pfx-файл (экспорт с закрытым ключом). И использовать подгружая сертификат из файла методом Load объекта CAPICOM.Signer.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.