Статус: Новичок
Группы: Участники
Зарегистрирован: 19.11.2019(UTC) Сообщений: 7 Откуда: Иркутск
|
Когда вызываю ComputeSignature Код:
static byte[] SignMsg(
Byte[] msg,
X509Certificate2 signerCert)
{
// Создаем объект ContentInfo по сообщению.
// Это необходимо для создания объекта SignedCms.
ContentInfo contentInfo = new ContentInfo(msg);
// Создаем объект SignedCms по только что созданному
// объекту ContentInfo.
// SubjectIdentifierType установлен по умолчанию в
// IssuerAndSerialNumber.
// Свойство Detached устанавливаем явно в true, таким
// образом сообщение будет отделено от подписи.
SignedCms signedCms = new SignedCms(contentInfo, true);
// Определяем подписывающего, объектом CmsSigner.
CmsSigner cmsSigner = new CmsSigner(signerCert);
cmsSigner.IncludeOption = X509IncludeOption.EndCertOnly;
// Подписываем CMS/PKCS #7 сообение.
//Console.Write("Вычисляем подпись сообщения для субъекта " + "{0} ... ", signerCert.SubjectName.Name);
//CMessage.Info("Вычисляем подпись сообщения для субъекта " + signerCert.SubjectName.Name);
//CMessage.Info("start signedCms.ComputeSignature(cmsSigner)"+ cmsSigner.Certificate.SubjectName);
// ТУТ ОШИБКА - Набор ключей не существует
signedCms.ComputeSignature(cmsSigner);
//CMessage.Info("end signedCms.ComputeSignature(cmsSigner)");
Console.WriteLine("Успешно.");
// Кодируем CMS/PKCS #7 подпись сообщения.
return signedCms.Encode();
}
пишет набор ключей не существует на методе ComputeSignature Что делать? Причем на всех ПК работает. А вот на одном не срабатывает. Сертификат переустанавливали.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Здравствуйте.
1. Приложение выполняется под другим пользователем 2. Неправильно установлен сертификат. Панель управления КриптоПРО CSP\Протестировать\По сертификату - есть ошибка? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.11.2019(UTC) Сообщений: 7 Откуда: Иркутск
|
1. не совсем понятно что имеется ввиду под другим пользователем. 2. протестировал - ошибок не обнаружено.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: stim24 1. не совсем понятно что имеется ввиду под другим пользователем. 2. протестировал - ошибок не обнаружено. 1. Частая ошибка - тестируют через панель управления под текущим пользователем, а приложение выполняется под другим (служба) 2. Протестировали именно тот сертификат, что передаётся в signerCert? Сверьте отпечатки. Не показано, как получается signerCert. Импортом сертификата из файла или поиском через хранилище Личное? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.11.2019(UTC) Сообщений: 7 Откуда: Иркутск
|
1. Под одним пользователем. 2. Получаю его так Код:
string signerName="Имя сертификата";
X509Certificate2 signerCert = GetSignerCert(signerName);
Вот ф-ция Код:
static X509Certificate2 GetSignerCert(string signerName)
{
// Открываем хранилище My.
X509Store storeMy = new X509Store(StoreName.My,
StoreLocation.CurrentUser);
storeMy.Open(OpenFlags.ReadOnly);
// Отображаем сертификаты для удобства работы
// с примером.
Console.WriteLine("Найдены сертификаты следующих субъектов " +
"в хранилище {0}:", storeMy.Name);
foreach (X509Certificate2 cert in storeMy.Certificates)
{
Console.WriteLine("\t{0}", cert.SubjectName.Name);
// Clipboard.SetText(cert.SubjectName.Name);
int tt = 0;
}
// Ищем сертификат для подписи.
X509Certificate2Collection certColl =
storeMy.Certificates.Find(X509FindType.FindBySubjectName,
signerName, false);
Console.WriteLine(
"Найдено {0} сертификат(ов) в хранилище {1} для субъекта {2}",
certColl.Count, storeMy.Name, signerName);
// Проверяем, что нашли требуемый сертификат
if (certColl.Count == 0)
{
Console.WriteLine(
"Сертификат для данного примера не найден " +
"в хранилище. Выберите другой сертификат для подписи. ");
return null;
}
storeMy.Close();
// Если найдено более одного сертификата,
// возвращаем первый попавщийся.
return certColl[0];
}
Как понять проверить "отпечатки"? Отредактировано пользователем 1 октября 2020 г. 10:08:09(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Find(X509FindType. FindBySubjectName, signerNameЦитата:// Проверяем, что нашли требуемый сертификат if (certColl.Count == 0) А если будет 2 и более подходящих сертификата и вернётся просроченный\не имеющий ссылку на закрытый ключ? certColl.Count какое имеет значение, 1? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: stim24 Как понять проверить "отпечатки"? Свойство thumbprint. По нему и искать в хранилище, а не по signerName |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close