logo Наши способы организации безопасного удалённого доступа к рабочим местам и корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Veligord  
#1 Оставлено : 28 января 2020 г. 13:06:56(UTC)
Veligord

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

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

У меня есть документ и открепленная электронная подпись. Как мне получить дату подписания документа?

Пробовал сделать вот так:

Код:
var signedCms = new SignedCms();
signedCms.Decode(fileBuffer); // fileBuffer - файл электронной подписи в виде массива байт

foreach (var signerInfo in signedCms.SignerInfos)
{
    foreach (var unsignedAttribute in signerInfo.UnsignedAttributes)
    {
        foreach (var counterSignInfo in signerInfo.CounterSignerInfos)
        {
            foreach (var signedAttribute in counterSignInfo.SignedAttributes)
            {
                //if (signedAttribute.Oid.Value == WinCrypt.szOID_RSA_signingTime)
                {
                     Pkcs9SigningTime signingTime = (Pkcs9SigningTime)signedAttribute.Values[0];
                     //Console.Out.WriteLine("Signing Time UTC: " + signingTime.SigningTime);
                }
            }
        }
    }
}


Но в таком случае в signerInfo.UnsignedAttributes - пусто и дальнейший код не выполняется. Подскажите, пожалуйста, как же все же получить дату подписания документа?

Отредактировано пользователем 28 января 2020 г. 13:07:29(UTC)  | Причина: Не указана

Offline two_oceans  
#2 Оставлено : 28 января 2020 г. 22:45:43(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 62 раз
Поблагодарили: 219 раз в 206 постах
Цитата:
foreach (var unsignedAttribute in signerInfo.UnsignedAttributes)
Добрый день. Навскидку непонятно что вы ходите этой строкой добиться, ведь далее внутри цикла unsignedAttribute не используется. Может осталась от предыдущей редакции и нужно удалить строку?

В целом же дело может быть в конкретном подтипе подписи. В подписи вообще может не быть никакого упоминания о времени подписания, в этом случае используется текущее время на момент проверки подписи (естественно в таком случае проверяющая сторона может отдельно сохранить время когда подпись поступила и использовать это время как "первое приближение" или добавлять свою метку доверенного времени при поступлении).

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

Отредактировано пользователем 28 января 2020 г. 23:03:27(UTC)  | Причина: Не указана

Offline Veligord  
#3 Оставлено : 29 января 2020 г. 9:39:35(UTC)
Veligord

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

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

two_oceans, спасибо за ответ. А вы можете подсказать, как проверить, что в подписи есть дата подписания?
Offline two_oceans  
#4 Оставлено : 30 января 2020 г. 1:34:24(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 62 раз
Поблагодарили: 219 раз в 206 постах
Для тестового файла (что я имел в виду выше) можно посмотреть каким-то другим средством проверки подписи, уточняющим, какая именно метка времени найдена (недоверенная от подписавшего, доверенная от сервера времени, метка времени на атрибуты, на подпись или на сами подписанные данные).

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

Более детально в форматы cades long type и более продвинутые не вникал, не хочу вводить в заблуждение. В соседней теме, например, подпись не проверялась потому что timestamp был не с тем оидом и подписанный. https://www.cryptopro.ru...aspx?g=posts&t=17515 Там есть ссылки на RFC по теме.
Offline Андрей Писарев  
#5 Оставлено : 31 января 2020 г. 5:46:25(UTC)
Андрей *

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

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

Сказал «Спасибо»: 334 раз
Поблагодарили: 1310 раз в 1023 постах
Автор: Veligord Перейти к цитате
У меня есть документ и открепленная электронная подпись. Как мне получить дату подписания документа?

Пробовал сделать вот так:

Код:
var signedCms = new SignedCms();
signedCms.Decode(fileBuffer); // fileBuffer - файл электронной подписи в виде массива байт

foreach (var signerInfo in signedCms.SignerInfos)
{
    foreach (var unsignedAttribute in signerInfo.UnsignedAttributes)
    {
        foreach (var counterSignInfo in signerInfo.CounterSignerInfos)
        {
            foreach (var signedAttribute in counterSignInfo.SignedAttributes)
            {
                //if (signedAttribute.Oid.Value == WinCrypt.szOID_RSA_signingTime)
                {
                     Pkcs9SigningTime signingTime = (Pkcs9SigningTime)signedAttribute.Values[0];
                     //Console.Out.WriteLine("Signing Time UTC: " + signingTime.SigningTime);
                }
            }
        }
    }
}


Но в таком случае в signerInfo.UnsignedAttributes - пусто и дальнейший код не выполняется. Подскажите, пожалуйста, как же все же получить дату подписания документа?



Поиск по форуму:Pkcs9SigningTime

Пример кода:
https://www.cryptopro.ru...&m=101624#post101624

Pkcs9SigningTime в подписанных атрибутах.

Либо необходимо уточнение, какая метка используется. Написано выше про rfc
Техническую поддержку оказываем тут
Наша база знаний
Offline Veligord  
#6 Оставлено : 31 января 2020 г. 18:26:43(UTC)
Veligord

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

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

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