Гость
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Алгоритм ключа сертификата не поддерживается / 14 сообщений из 14, страница 1 из 1
07.07.2010, 18:11
    #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
19.07.2010, 11:15
    #36747662
Алгоритм ключа сертификата не поддерживается
Вообще ни у кого нет никаких мыслей по этому поводу?

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

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

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

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

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

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

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

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

Вот вот, открывается. Люди добрые подскажите, наверняка можно это как нить реализовать
...
Рейтинг: 0 / 0
04.04.2011, 16:31
    #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
04.04.2011, 16:53
    #37198532
nkz
nkz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм ключа сертификата не поддерживается
единственное что я понял, так это разница между сообщениями 10 месяцев.
какой вопрос то? и что за код?
...
Рейтинг: 0 / 0
04.04.2011, 17:01
    #37198560
serega063
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм ключа сертификата не поддерживается
nkzи что за код?

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

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


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

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

Вопрос как реализовать вход на сайт при помощи C#
...
Рейтинг: 0 / 0
05.04.2011, 14:12
    #37200288
nkz
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
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / Алгоритм ключа сертификата не поддерживается / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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