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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline r00xus  
#1 Оставлено : 22 июля 2022 г. 14:46:51(UTC)
r00xus

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

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

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

У меня задача подписать XML документ на клиенте с помощью плагина для браузера, затем отправить на сервер в .NET Core Rest API, там валидировать подпись и вытащить данные по владельцу сертификата.
Подписывает хорошо. А вот с серверной частью проблемы.
Вот тестовый код проверки (в виде консольного приложения)

Код:
using System;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Windows.Forms;
using System.Xml;

namespace DigitalSignCheck
{
    internal class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
            var openResult = GetFileName();

            if (openResult.Item1)
            {
                var xmlDoc = new XmlDocument();

                xmlDoc.PreserveWhitespace = true;

                xmlDoc.Load(openResult.Item2);

                var result = CheckSign(xmlDoc);

                Console.WriteLine(result);
            }
        }

        static (bool, string) GetFileName()
        {
            using (var dialog = new OpenFileDialog())
            {
                dialog.Title = "Open Excel Document";

                dialog.Filter = "XML Document|*.xml";

                if (dialog.ShowDialog() == DialogResult.OK)
                {
                    return (true, dialog.FileName);
                }
            }
            return (false, null);
        }

        static bool CheckSign(XmlDocument xmlDoc)
        {
            var signedXml = new SignedXml(xmlDoc);

            var nodeList = xmlDoc.GetElementsByTagName("Signature", SignedXml.XmlDsigNamespaceUrl);

            if (nodeList.Count == 0)
            {
                throw new CryptographicException("Verification failed: No Signature was found in the document.");
            }

            signedXml.LoadXml((XmlElement)nodeList[0]);

            return signedXml.CheckSignature();
        }
    }
}

На машине разработчика установлен CryptoPro .NET SDK 1.0.8174.2 и КриптоПро CSP.
Если запускать код в проекте .NET Framework 4.8, то подпись валидируется успешно, если под .NET Core 3.1, то валидация проваливается.
Данные сертификата читаются нормально в обоих случаях.
Правильно ли я понимаю что это из-за отсутствия поддержки .NET Core и в RestAPI проверка тоже работать не будет?

Отредактировано пользователем 22 июля 2022 г. 15:03:16(UTC)  | Причина: Не указана

Offline Артём Макаров  
#2 Оставлено : 27 июля 2022 г. 10:43:51(UTC)
Артём Макаров

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

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Добрый день

CryptoPro .NET поддерживает только .NET Framework до версии 4.8 включительно. Работа под .net core не поддерживается.

Если есть необходимость работы под core 3.1 надо смотреть в сторону нашего форка.
Пример тестового проекта, а также инструкции по сборке есть тут - https://github.com/Crypt.../DotnetCoreSampleProject
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.