powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Алгоритм ключа сертификата не поддерживается
14 сообщений из 14, страница 1 из 1
Алгоритм ключа сертификата не поддерживается
    #36728747
Добрый день.
Не подскажите, почему при попытке соедениться по Https с сервером у меня вываливается ошибка на строке:

Stream request = request.GetRequestStream();

Ошибка следующая:
Базовое соединение закрыто: Непредвиденная ошибка при приеме. Алгоритм ключа сертификата не поддерживается.

Стек:
в System.Security.Cryptography.X509Certificates.PublicKey.get_Key()\r\n в System.Security.Cryptography.X509Certificates.X509Certificate2.ToString(Boolean verbose)\r\n в System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint)\r\n в System.Net.Security.SecureChannel.GenerateToken(Byte[] input, Int32 offset, Int32 count, Byte[]& output)\r\n в System.Net.Security.SecureChannel.NextMessage(Byte[] incoming, Int32 offset, Int32 count)\r\n в System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest)\r\n в System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest)\r\n в System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult)\r\n в System.Net.TlsStream.CallProcessAuthentication(Object state)\r\n в System.Threading.ExecutionContext.runTryCode(Object userData)\r\n в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)\r\n в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)\r\n в System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result)\r\n в System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size)\r\n в System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size)\r\n в System.Net.ConnectStream.WriteHeaders(Boolean async)"

Проблема в том, что я использую сертификат, который использует ключи ГОСТ 2001, то есть сгенерированный УЦ отечественного криптопровайдера.
Если посмотреть класс сертификата, то там в поле PrivateKey и PublicLey.Key указано "Алгоритм ключа сертификата не поддерживается".

Как можно добавить эту поддержку или обойти её. Можно ли вообще в .NET работать с нашими сертификатами?
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36747662
Вообще ни у кого нет никаких мыслей по этому поводу?

Выдается обычное исключение CryptographicException:
Описание MSDN - значение ключа не является значением RSA или DSA, или ключ не читается

Может мне свой класс написать, добавляющий поддержку ключей по ГОСТ, может ктонить в курсе, как это сделать, а то получается что можно работать только с RSA и DSA.
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36748098
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потребовать (или купить) у "отечественного криптопровайдера" соответствующий sdk?
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36752921
Да, действительно, shaprei sdk от КриптоПро помог, однако это лицензионный продукт. Судя по всему зтандартными способами этот вопрос не решить, потому что .NET всегда будет выводить Exception если алгоритм ключа не поддерживатся.
Возник другой вопрос:
Какими способами можно осужествить связь по https с сервером, если делать это в обход .NET?
То есть если формирование запроса с заголовками происходит в моей библиотеке, как другим способом можно его отправить по https?
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36753588
Victor Tarasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DageNeZnauKakoyLogin,

Добавлю, что если будешь использовать SDK, то для промышленной эксплуатации чтоб все было по ГОСТу, необходим акт встаивания.

А про https, все таки не ясно, Вы какие сертификаты будете использовать???
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36754094
Victor TarasovDageNeZnauKakoyLogin,

Добавлю, что если будешь использовать SDK, то для промышленной эксплуатации чтоб все было по ГОСТу, необходим акт встаивания.

А про https, все таки не ясно, Вы какие сертификаты будете использовать???

Я буду использовать сертификаты, выданные УЦ отечественного криптопровайдера инфотекс => привязанные к ключу, шифрующему по ГОСТ 34.10 (вроде так :) => при попытке зайти на сайт по https вываливается Exception (: Не удалось создать защищенный канал SSL/TLS).
Если просомтреть класс сертификата, то там в поле PrivateKey написано threw NotSupportedException. Поэтому собственно ошибка и вылетает. Так вот я хочу понятьЯ, можно ли как нибуть организовать защищенный канал, не прибегая к сторонним платным SDK?
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36754105
Victor Tarasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DageNeZnauKakoyLogin
Я буду использовать сертификаты, выданные УЦ отечественного криптопровайдера инфотекс => привязанные к ключу, шифрующему по ГОСТ 34.10 (вроде так :) => при попытке зайти на сайт по https вываливается Exception (: Не удалось создать защищенный канал SSL/TLS).
Если просомтреть класс сертификата, то там в поле PrivateKey написано threw NotSupportedException. Поэтому собственно ошибка и вылетает. Так вот я хочу понятьЯ, можно ли как нибуть организовать защищенный канал, не прибегая к сторонним платным SDK?
Если Вы хотите чтобы было у Вас все юрилически правильно, то необходимо приобрести SDK и еще отдать куда то там вашу поделку, чтобы получить акт встраивания(что вы в свой софт тож закладок не запихали). Вот так все печально.
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36754778
Про юридическую сторону понятно, однако хотелось бы знать с технической точки зрения, могу ли я грубо говоря послать запрос через .NET на сайт по https с использованием сертификата к примеру КриптоПро без использования сторонних SDK, так как утилита - простой exe-шник 100 кб, а sdk - отдельный инсталлятор весом в 10 мб. Или вообще никак? Через браузер ведь страница замечательно открывается.
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #36755767
Victor Tarasov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DageNeZnauKakoyLogin,

Без сторонего SDK можно, если Вы сами напишете свой провайдер который булет реализовывать ГОСТовый алгоритм шифрования.
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #37198441
serega063
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DageNeZnauKakoyLoginЧерез браузер ведь страница замечательно открывается.

Вот вот, открывается. Люди добрые подскажите, наверняка можно это как нить реализовать
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #37198461
serega063
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
29.
30.
31.
32.
33.
34.
35.
36.
Вот собственно код
public string Downloading(string url)
    {
      X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
      store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
      X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, "1FА3F6571112000019УУ", false);

      byte[] certData = certs[0].Export(X509ContentType.Cert, "1111111111");
      X509Certificate newCert = new X509Certificate(certData);
     
      HttpWebRequest request_authorize = (HttpWebRequest)WebRequest.Create(url);
      request_authorize.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
      request_authorize.AllowAutoRedirect = true;
      request_authorize.Referer = this.url;
      request_authorize.Timeout = 60000 * 25; //25 минут
      
      ServicePointManager.ServerCertificateValidationCallback = (a, b, c, d) => true;

      request_authorize.ClientCertificates.Add(newCert);

      try
      {

        HttpWebResponse response_authorize = (HttpWebResponse)request_authorize.GetResponse();
        string html = new StreamReader(response_authorize.GetResponseStream(), Encoding.UTF8).ReadToEnd();
        return html;
      }
      catch (WebException e)
      {
        return e.Message; //Базовое соединение закрыто: Непредвиденная ошибка при приеме.
      }
      
      
      

    }

У меня еще происходит экспорт сертификата, и создание его
Код: plaintext
1.
2.
byte[] certData = certs[0].Export(X509ContentType.Cert, "1111111111");
X509Certificate newCert = new X509Certificate(certData);
Если этого не делать то никакой ошибки не происходит, но и авторизация на сайте не проходит
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #37198532
nkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
единственное что я понял, так это разница между сообщениями 10 месяцев.
какой вопрос то? и что за код?
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #37198560
serega063
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nkzи что за код?

Это метод который должен пройти авторизацию на сайте при помощи сертификата

nkzкакой вопрос то?


Нужно пройти авторизацию на сайте. Сайт использует клиентские сертификаты. Сертификаты шифрованы КриптоПРО

У меня на машине стоит криптоПро, в IE открываю страницу с авторизацией, мне вылетает окошко с выбором сертификата.
Указываю, все работает нормально!

Вопрос как реализовать вход на сайт при помощи C#
...
Рейтинг: 0 / 0
Алгоритм ключа сертификата не поддерживается
    #37200288
nkz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
serega063nkzи что за код?

Это метод который должен пройти авторизацию на сайте при помощи сертификата



сначала даже не обратил внимания.
попробуйте использовать X509Certificate2. по крайней мере, в примерах криптопро именно он фигурирует.
экспорт, соответственно, будет не нужен.
а так в целом все похоже на правду.

можно еще более заморочиться и использовать апи
- CryptAcquireContext(ref pProv, Cnf.ContName, "", 75, 0)
- CryptGetUserKey(pProv, WinCryptH.AT_KEYEXCHANGE, ref pUserKey)
- CryptGetKeyParam(pUserKey, WinCryptH.KP_CERTIFICATE, pCert, ref dt_len, 0)

и далее new X509Certificate(pCert, dt_len)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Алгоритм ключа сертификата не поддерживается
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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