powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подписать текст сертификатом
9 сообщений из 9, страница 1 из 1
Подписать текст сертификатом
    #39987192
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, как можно подписать текст имеющимся сертификатом?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
 public async Task SignTextAsync(AuthRequest authRequest) 
        {
            X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
            store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);

           X509Certificate2 certificate=default;

            foreach (var cert in store.Certificates) // ищем нужный нам сертификат
            {
                if (string.Equals(cert.SerialNumber, "012345679"))
                {
                   certificate = cert;         
                    break;
                }
            }

            if (certificate is null)
                throw new Exception("Не найден сертификат");

            UnicodeEncoding encoding = new UnicodeEncoding();

            byte[] data = encoding.GetBytes(authRequest.data); //authRequest.data is string

            if (!certificate.HasPrivateKey)
               throw  new Exception("У сертификата нет приватного ключа");

            RSACryptoServiceProvider provider= (RSACryptoServiceProvider)certificate.PrivateKey; //System.NotSupportedException: The certificate key algorithm is not supported        
        }


Везде в туториалах используется последняя строчка и подписывается так
Код: c#
1.
 provider.SignData(dataToBeSigned, new SHA1CryptoServiceProvider());


но я получаю NotSupportedException во время выполнения приложения, не могу понять почему.
Подскажите плиз куда посмотреть. Спасибо
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987200
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это вряд ли связано с твой проблемой, просто дополнение к проверке, которое мне пришлось писать в своем коде
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
            if (!certificate.HasPrivateKey)
              throw new InvalidOperationException($"Сертификат '{name}' не содержит секретного ключа.");

            try
              {
              certificate.PrivateKey.GetType();
              }
            catch (Exception ex)
              {
              throw new InvalidOperationException($"Секретные ключи сертификата '{name}' недоступны текущему пользователю.", ex);
              }

...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987316
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vb_sub
Подскажите плиз куда посмотреть. Спасибо

1. Проверьте алгоритм открытого ключа (должен быть RSA) и алгоритм подписи (должен быть sha256RSA или sha1RSA).
2. Нужны детали: версия ОС, используемый фреймворк. Например, если у сертификата алгоритм подписи sha256ECDSA, то это поддерживается только начиная с 4.6.1 .
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987369
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
1) так явно не написано в сертификате какой алгоритм шифрования. Есть ссылка на простыню госта где описывается как математически происходит процесс. 256 бит совпадает.
2)Майкрософт Windows 10 Pro
Версия ОС: 10.0.19041 построение 19041-development
WindowsServer2012-production
Net Core 3.1
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987378
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SignatureAlgorithm = {System.Security.Cryptography.Oid}
HasPrivateKey= true, но свойство PrivateKey сразу дает "not supported Exception", если ставлю брейкпоинт и инспектирую объект сертификата X509Certificate2.
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987386
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эт нашенский, православный сертификат, что бы работал нужна реализация например от крипто про или валидата.
Поищи на их сайтах, там есть примеры, ну и ПО их прикупить придется :)
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987387
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробовал вызывать методы
Код: c#
1.
2.
3.
           var re= certificate.GetDSAPrivateKey();
            var go = certificate.GetECDsaPrivateKey();
            var re1 = certificate.GetRSAPrivateKey();


все по null.
ЕвгенийВ, спасибо за подсказку попробую.
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987397
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о блин! теперь (возможно уже давно) openssl поддерживает гостовские алгоритмы
https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=103341#post103341
в пень криптопро, если не нужна сертификация
...
Рейтинг: 0 / 0
Подписать текст сертификатом
    #39987405
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал аналогичный код на NetFramework-метод certificate.PrivateKey заработал.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Подписать текст сертификатом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]