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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline dmyudin  
#1 Оставлено : 30 ноября 2020 г. 10:39:25(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Добрый день.
Пытаюсь создать открепленную подпись с использованием КриптоПро .NET
В результате получается файл подписи, который не проходит валидацию стандартными средствами через приложение "Инструменты КриптоПро".
Также замечено, что размер файла, создаваемого написанной программой примерно в 1.5 раза превышает размер файл открепленной подписи, которая создается с помощью "Инструментов КриптоПро".
И если открыть файл в текстовом редакторе, там конечно ничего не понятно, но видно, что некоторые блоки повторяются...

Вот код:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace CryptoProSigner2
{
class Program
{
[STAThread]
static void Main(string[] args)
{
string inputString = args[0];
string certSerial = args[1];
bool detached = args[2] == "detached";
X509Certificate2 signerCert = GetSignerCert(certSerial);
if (signerCert == null)
{
Console.Write("certificate not found");
return;
}
Encoding unicode = Encoding.Unicode;
byte[] bytes = unicode.GetBytes(inputString);

ContentInfo contentInfo = new ContentInfo(bytes);
SignedCms signedCms = new SignedCms(contentInfo, detached);
CmsSigner cmsSigner = new CmsSigner(signerCert);
signedCms.ComputeSignature(cmsSigner);
byte[] signedData = signedCms.Encode();
string filename = detached ? "detached.p7s" : "attached.p7s";
File.WriteAllBytes("e:\\temp\\crypto\\" + filename, signedData);
}
static X509Certificate2 GetSignerCert(string certSerial)
{
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509Certificate2 ret = null;
foreach (X509Certificate2 cer in store.Certificates)
{
if (cer.SerialNumber.Equals(certSerial))
{
ret = cer;
break;
}
}
store.Close();
return ret;
}
}
}
Offline Андрей *  
#2 Оставлено : 30 ноября 2020 г. 11:04:26(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,589
Мужчина
Российская Федерация

Сказал «Спасибо»: 388 раз
Поблагодарили: 1598 раз в 1229 постах
Здравствуйте.
Раз в полгода...

inputString - читать из файла, File.ReadAllBytes...

Тогда не будет проблем.


Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
dmyudin оставлено 30.11.2020(UTC)
Offline Андрей *  
#3 Оставлено : 30 ноября 2020 г. 11:16:48(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 10,589
Мужчина
Российская Федерация

Сказал «Спасибо»: 388 раз
Поблагодарили: 1598 раз в 1229 постах
Простой пример - работа с ФНС и требование для xml файлов - ANSI.

Если подписывать строку как utf8 (в тесте из консоли) - не будет подпись проверяться (т.к. в файле - ANSI).
Техническую поддержку оказываем тут
Наша база знаний
Offline two_oceans  
#4 Оставлено : 30 ноября 2020 г. 11:18:21(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,351
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 318 раз в 300 постах
Полтора или 1.33? 1.33 похоже на кодировку Base64 (представление двоичных данных печатными текстовыми символами, получаемый файл начинается с MIA... или MII...), просто декодируйте из нее, если нужно чистые DER данные (файл начинается с байта 0x30 который виден в блокноте как 0). Еще может быть отличие по количеству включаемых сертификатов, что влияет на размер.

Отредактировано пользователем 30 ноября 2020 г. 11:22:33(UTC)  | Причина: Не указана

Offline dmyudin  
#5 Оставлено : 30 ноября 2020 г. 11:25:30(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Поменял
byte[] bytes = unicode.GetBytes(inputString);
на
byte[] bytes = File.ReadAllBytes(filename);

Безрезультатно.

В base64 даже не понимаю какая строка кода могла бы в нее кодировать...
Offline dmyudin  
#6 Отправлено: : 30 ноября 2020 г. 11:32:11(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Я нажал два раза на файле p7s с корректной подписью, созданной с помощью Инструментов КриптоПро.
Открылась оснастка certmgr, показывающая сертификаты. И там один сертификат, выданный компании Эдисофтом.

А когда то же самой делаю для файла подписи, сгенерированного программой, открывается оснастка и в ней два сертификата. Первый - тот же Эдисофтовский, а второй - от Минкомсвязи, выданный Эдисофту.
Как этот хвост прицепился?
Offline dmyudin  
#7 Оставлено : 30 ноября 2020 г. 11:38:12(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Самое интересное, что обе подписи проверяются сторонним сервисом проверки ЭЦП успешно. Может тогда просто пренебречь тем, что софт Криптопро и самописная программа NET возвращают открепленные подписи разной длины и содержания?
Offline two_oceans  
#8 Оставлено : 30 ноября 2020 г. 11:41:35(UTC)
two_oceans

Статус: Эксперт

Группы: Участники
Зарегистрирован: 05.03.2015(UTC)
Сообщений: 1,351
Российская Федерация
Откуда: Иркутская область

Сказал(а) «Спасибо»: 90 раз
Поблагодарили: 318 раз в 300 постах
thanks 1 пользователь поблагодарил two_oceans за этот пост.
dmyudin оставлено 30.11.2020(UTC)
Offline dmyudin  
#9 Оставлено : 30 ноября 2020 г. 11:54:02(UTC)
dmyudin

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

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

Сказал(а) «Спасибо»: 3 раз
Да, работает, Спасибо.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.