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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline CyberWatcher  
#1 Оставлено : 18 апреля 2023 г. 19:53:13(UTC)
CyberWatcher

Статус: Активный участник

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

Сказал(а) «Спасибо»: 12 раз
Добрый день!

Поясните разницу между X509Certificate и X509Certificate2 ?

На сколько я вижу X509Certificate2 наследуется от X509Certificate.

В этом коде
Код:
 var cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "037409F20085AF8D9847DA45A4F9F40AD0", false)[0];


Переменная cert это X509Certificate2.

Если посмотреть пример создания подписи тут https://github.com/CryptoPro/libcore#signed-xml-sign

то там используется класс X509Certificate.

И вообще я впервые сталкиваюсь с необходимостью работать с крипто провайдером, поэтому хочу понять правильно ли я понимаю алгоритм подписания строки или документа.

1. Найти сертификат
2. Вытащить для найденного сертификата закрытые ключи
3. Подписать документ этими ключами.
4. В результате получается файл подписи документа, по которому как раз потом и можно с помощью открытого ключа сертификата проверить подпись.

Если я не прав пусть старшие товарищи меня поправят.

И еще хотелось бы пояснений к этому методу:

Код:
static XmlDocument SignXmlFile(
    XmlDocument doc,
    AsymmetricAlgorithm Key,
    X509Certificate Certificate,
    string DigestMethod = CpSignedXml.XmlDsigGost3411_2012_256Url)


На сколько я понимаю параметр Key, это как раз закрытые ключи? Есть ли другие методы для подписания например документа ms word или просто строки?
Мне нужно подписывать строку.

Отредактировано пользователем 18 апреля 2023 г. 21:55:58(UTC)  | Причина: Не указана

Offline Георгий Садофьев  
#2 Оставлено : 19 апреля 2023 г. 8:04:35(UTC)
Георгий Садофьев

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

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

Поблагодарили: 31 раз в 30 постах
Добрый день!

Цитата:
Поясните разницу между X509Certificate и X509Certificate2 ?

Достаточно полный ответ можно найти здесь.
Если кратко, то класс X509Certificate2 является развитием класса X509Certificate, в нём добавлены дополнительные свойства (из спецификаций X509 версии V2 и V3), а также возможность явного обращения к ключу.
В своём коде используйте X509Certificate2.

Цитата:
Если я не прав пусть старшие товарищи меня поправят.

Это правильная последовательность, она подходит для большинства случаев.

Цитата:
На сколько я понимаю параметр Key, это как раз закрытые ключи?

Да, верно.

Цитата:
Есть ли другие методы для подписания например документа ms word или просто строки?
Мне нужно подписывать строку.

С вероятностью близкой к 1 Вам подойдёт класс SignedCms (см. этот пример).
Формат подписи CMS является универсальным и распознаётся большинством систем и ПО, работающих с криптографией.
Данный формат представляет собой контейнер, который содержит подпись документа, может содержать сам подписанный документ и сертификат ключа проверки электронной подписи, так что проверяющей стороне легко найти все данные, необходимые для проверки подписи.
В указанном выше примере использования SignedCms параметр bytesToHash представляет собой массив байтов, который можно получить из строки, например, с помощью методов из пространства имён System.Text.Encoding.
SignedCms предполагает, что на подпись идёт именно произвольный массив байтов (это могут быть байты документа docx или любого другого), это делает данный формат не привязанным к формату подписываемых данных.

Существует множество других форматов подписи. Вот некоторые из них:
1. Подпись документов MS Office - в этом случае подпись встраивается в сам документ, проверить её можно, открыв документ в соответствующем редакторе или с помощью специализированных библиотек для работы с Office документами.
2. Подпись документов PDF - специальный формат, предназначенный для встраивания подписи внутрь PDF документа, проверить её можно в программе Acrobat Reader или с использованием специальных библиотек для работы с PDF документами.
Все эти подписи можно создать только с использованием сторонних специализированных библиотек или сервисов.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Георгий Садофьев за этот пост.
CyberWatcher оставлено 19.04.2023(UTC)
Offline CyberWatcher  
#3 Оставлено : 19 апреля 2023 г. 14:28:43(UTC)
CyberWatcher

Статус: Активный участник

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

Сказал(а) «Спасибо»: 12 раз
Спасибо большое!
Но мне не понятно что это GostNonPersistCmsTests такое в данном примере.
Поясните пожалуйста.

И еще вопрос, если я получаю сертификат вот таким способом из хранилища (у меня сейчас там один сертификат), то как я могу использовать его в приведенном вами примере?

Код:
X509Certificate2 cert;

        using (var store = new CpX509Store(StoreName.My, StoreLocation.CurrentUser))
        {
            store.Open(OpenFlags.ReadOnly);
            var storeCerts = store.Certificates;
            Console.WriteLine("storeCerts.Count = " + storeCerts.Count);
            foreach (var crt in storeCerts)
            {
                Console.WriteLine("crt.SerialNumber = " + crt.SerialNumber);
            }
            cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "037409F20085AF8D9847DA45A4F9F40AD0", false)[0];
            Console.WriteLine("cert.SubjectName.Name = " + cert.SubjectName.Name);
            Console.WriteLine("cert.HasPrivateKey = " + cert.HasPrivateKey);
        }
Offline CyberWatcher  
#4 Оставлено : 19 апреля 2023 г. 14:37:45(UTC)
CyberWatcher

Статус: Активный участник

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

Сказал(а) «Спасибо»: 12 раз
Я сделал так:

Код:
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using LibCore;
using LibCore.Security.Cryptography.X509Certificates;

namespace CryptoProConsoleLib;

public class Program
{
    public static void Main(string[] args)
    {
        Initializer.Initialize();
        // ready to go!

        X509Certificate2 cert;

        using (var store = new CpX509Store(StoreName.My, StoreLocation.CurrentUser))
        {
            store.Open(OpenFlags.ReadOnly);
            var storeCerts = store.Certificates;
            Console.WriteLine("storeCerts.Count = " + storeCerts.Count);
            foreach (var crt in storeCerts)
            {
                Console.WriteLine("crt.SerialNumber = " + crt.SerialNumber);
            }
            cert = store.Certificates.Find(X509FindType.FindBySerialNumber, "037409F20085AF8D9847DA45A4F9F40AD0", false)[0];
            Console.WriteLine("cert.SubjectName.Name = " + cert.SubjectName.Name);
            Console.WriteLine("cert.HasPrivateKey = " + cert.HasPrivateKey);
        }
        
        byte[] signature;
        string strForSignature = "Sign ME if you can!";
        byte[] bytesToHash = Encoding.Default.GetBytes(strForSignature);
        using (var gostCert = cert)
        {
            var contentInfo = new ContentInfo(bytesToHash);
            var signedCms = new SignedCms(contentInfo, false);
            CmsSigner cmsSigner = new CmsSigner(gostCert);
            signedCms.ComputeSignature(cmsSigner);
            signature = signedCms.Encode();
            Console.WriteLine($"CMS Sign: {Convert.ToBase64String(signature)}");
        }
    }
}


Вроде работает, но я не уверен. Последний оператор Console.Write выдал вот такое:

Код:
CMS Sign: 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
Offline CyberWatcher  
#5 Оставлено : 19 апреля 2023 г. 14:47:44(UTC)
CyberWatcher

Статус: Активный участник

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

Сказал(а) «Спасибо»: 12 раз
Так же не особо понятно назначение метода Decode если он ни чего не возвращает.
Какой в нем смысл? Этот же вопрос касается и метода CheckSignature, так как он тоже ни чего не возвращает.

Код:
 public void Decode(byte[] encodedMessage)
        {
            if (encodedMessage == null)
                throw new ArgumentNullException(nameof(encodedMessage));

            Decode(new ReadOnlySpan<byte>(encodedMessage));
        }



Код:
 {
            var contentInfo = new ContentInfo(bytesToHash);
            var signedCms = new SignedCms(contentInfo, false);
            CmsSigner cmsSigner = new CmsSigner(gostCert);
            signedCms.ComputeSignature(cmsSigner);
            signature = signedCms.Encode();
            Console.WriteLine($"CMS Sign: {Convert.ToBase64String(signature)}");
            signedCms.Decode(signature);
            signedCms.CheckSignature(true);

        }


Как я могу понять из двух последних команд что все ок с подписью? Если эти методы void?

Отредактировано пользователем 19 апреля 2023 г. 14:56:10(UTC)  | Причина: Не указана

Offline Андрей *  
#6 Оставлено : 19 апреля 2023 г. 15:33:03(UTC)
Андрей *

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

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

Сказал «Спасибо»: 549 раз
Поблагодарили: 2201 раз в 1717 постах
Автор: CyberWatcher Перейти к цитате
Так же не особо понятно назначение метода Decode если он ни чего не возвращает.
Какой в нем смысл? Этот же вопрос касается и метода CheckSignature, так как он тоже ни чего не возвращает.

Код:
 public void Decode(byte[] encodedMessage)
        {
            if (encodedMessage == null)
                throw new ArgumentNullException(nameof(encodedMessage));

            Decode(new ReadOnlySpan<byte>(encodedMessage));
        }



Код:
 {
            var contentInfo = new ContentInfo(bytesToHash);
            var signedCms = new SignedCms(contentInfo, false);
            CmsSigner cmsSigner = new CmsSigner(gostCert);
            signedCms.ComputeSignature(cmsSigner);
            signature = signedCms.Encode();
            Console.WriteLine($"CMS Sign: {Convert.ToBase64String(signature)}");
            signedCms.Decode(signature);
            signedCms.CheckSignature(true);

        }


Как я могу понять из двух последних команд что все ок с подписью? Если эти методы void?



Через try catch пишется код.
На catch ловить исключение с ошибкой.



Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
CyberWatcher оставлено 19.04.2023(UTC)
Offline CyberWatcher  
#7 Оставлено : 19 апреля 2023 г. 15:35:15(UTC)
CyberWatcher

Статус: Активный участник

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

Сказал(а) «Спасибо»: 12 раз
Автор: Андрей * Перейти к цитате

Через try catch пишется код.
На catch ловить исключение с ошибкой.


То есть если в моем случае приложение не валится, то все работает?
Offline Георгий Садофьев  
#8 Оставлено : 19 апреля 2023 г. 15:47:13(UTC)
Георгий Садофьев

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

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

Поблагодарили: 31 раз в 30 постах
Да. См. SignedCms:

Цитата:
This method throws an exception if the verification of a digital signature fails or any validation requirements are not met.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Георгий Садофьев за этот пост.
CyberWatcher оставлено 20.04.2023(UTC)
Offline CyberWatcher  
#9 Оставлено : 20 апреля 2023 г. 15:39:24(UTC)
CyberWatcher

Статус: Активный участник

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

Сказал(а) «Спасибо»: 12 раз
Спасибо. Да действительно все работает.

Последний вопрос в этой теме.

Если использовать LibCore, то эта ваша либа может находить установленный криптопро и использовать его как под виндой так и под линукс?
Или этой либе без разницы где искать сертификаты. Она может работать если не установлен КриптоПро на машине?

Мне надо написать сервис, который будет подписывать запросики, но он должен работать под виндой и линукс.

Или я что-то опять не так понимаю? Для работы вашей либы нужен установленный КриптоПро?

Отредактировано пользователем 20 апреля 2023 г. 17:10:25(UTC)  | Причина: Не указана

Offline Георгий Садофьев  
#10 Оставлено : 20 апреля 2023 г. 17:11:47(UTC)
Георгий Садофьев

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

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

Поблагодарили: 31 раз в 30 постах
Да, для работы обязательно нужен КриптоПро CSP.
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Георгий Садофьев за этот пост.
CyberWatcher оставлено 20.04.2023(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.