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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Masterbank  
#1 Оставлено : 30 июня 2008 г. 17:37:52(UTC)
Masterbank

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

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

Имеется проблема:
"The request was aborted: Could not create SSL/TLS secure channel." - такое исключение возбуждается после того, как я пытаюсь создать TLS/SSL соединение.

Используемое ПО:
Крипто-Про (ядро СКЗИ: 3.6.4070 KC1, продукт: 3.6.4856).
Sharpei (ver:1006, runtime:v2.0.50727)
MS Visual Studio 2005, (Express 2008)

using System;
using System.IO;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using CryptoPro.Sharpei;
using System.Text;

namespace Test
{
class Program
{
static void Main ( string[] args )
{
string requestURL = "https://<сервер>";
string proxy_addr = "proxy:8080";
string proxy_user = args[0];
string proxy_pass = args[1];
string user_agent = "CSharp HTTP Sample";
string find_value = "серийный номер ключа";
X509FindType find_type = X509FindType.FindBySerialNumber;
byte[] data = System.Text.Encoding.GetEncoding(1251).GetBytes("<?xml version=\"1.0\" encoding=\"windows-1251\" ?>");

WebProxy proxy;
X509Store store;
X509Certificate2 cert;
CookieContainer cc;

if (((proxy = new WebProxy(proxy_addr, true)) != null) && ((proxy.Credentials = new NetworkCredential(proxy_user, proxy_pass))!=null))
{
if ((store = new X509Store(StoreName.My, StoreLocation.CurrentUser)) != null)
{
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);
X509Certificate2Collection collection = store.Certificates.Find(find_type, find_value, true);
if (collection.Count > 0)
{
cert = collection[0];
HttpWebRequest http_req = (HttpWebRequest)WebRequest.Create(requestURL);
if ((http_req != null) && ((cc = new CookieContainer())) != null)
{
if ((http_req.ClientCertificates.Add(cert) >= 0) && (http_req.ClientCertificates.Count > 0))
{
http_req.CookieContainer = cc;
http_req.Credentials = CredentialCache.DefaultCredentials;
http_req.UserAgent = user_agent;
http_req.Proxy = proxy;
http_req.KeepAlive = true;
http_req.Headers.Set("Pragma", "no-cashe");
http_req.Timeout = 300000;
http_req.Method = "POST";
http_req.ContentType = "application/x-www-form-urlencoded";
http_req.ContentLength = data.Length;

using (Stream stream = http_req.GetRequestStream())
{
stream.Write(data, 0, data.Length);
stream.Close();
} // using stream
//} // if
} // if
} // if
store.Close();
} // if
} // if
}
} // class Program
} // namespace Test


StackTrace:
at System.Net.HttpWebRequest.GetRequestStream()
at TestBlizko.Program.Main(String[] args) in D:\Visual Studio 2005\Projects\Test\Test\Program.cs:line 56
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()

Прошу помочь разобраться в проблеме.
Offline alexlexa  
#2 Оставлено : 30 июня 2008 г. 19:39:42(UTC)
alexlexa

Статус: Участник

Группы: Участники
Зарегистрирован: 28.05.2008(UTC)
Сообщений: 11
Откуда: Москва

А без прокси сервера пробовали???
Offline Masterbank  
#3 Оставлено : 30 июня 2008 г. 19:41:48(UTC)
Masterbank

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

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

Без прокси тоже пробовали. Результат тот же.
Offline Челпанов А.  
#4 Оставлено : 4 июля 2008 г. 22:13:05(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Попробуйте поставить SP1 на .Net Framework.
Если ошибка не пропадет напишите есть ли сообщения в Application log от CPNetDetours?
С уважением, Александр.
Offline alexlexa  
#5 Оставлено : 8 июля 2008 г. 21:05:25(UTC)
alexlexa

Статус: Участник

Группы: Участники
Зарегистрирован: 28.05.2008(UTC)
Сообщений: 11
Откуда: Москва

Необходимо имперционацию делать на ASP .net !!!

Вот пример:

============ Вот мы класс для этих целей создали ================

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Security.Principal;

namespace CryptoPro
{
public class Impersonate
{
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;

WindowsImpersonationContext impersonationContext;

[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);

[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool RevertToSelf();

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);

public bool impersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;

if (RevertToSelf())
{
if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if (token != IntPtr.Zero)
CloseHandle(token);
if (tokenDuplicate != IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}

public void undoImpersonation()
{
if (impersonationContext != null)
{
impersonationContext.Undo();
}
}
}
}


============== Вот так использовать ==============

CryptoPro.Impersonate impersonate = new CryptoPro.Impersonate();
try
{
if (impersonate.impersonateValidUser(ImpersonateLogin, "", ImpersonatePassword))
{

// всю логику нужно уложить после имперционации!

xml = remoteObject.ExecuteRequest(doc.OuterXml, out ErrorMessage, xs);
}
}
finally
{
impersonate.undoImpersonation();
}

=====================

всю логику нужно уложить после имперционации!

Вот так вроде!
Offline Максим Коллегин  
#6 Оставлено : 9 июля 2008 г. 7:01:17(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
alexlexa написал:
Необходимо имперционацию делать на ASP .net !!!

Это к чему?
ASP .Net и сам умеет прекрасно имперсонироваться, если попросить.
Знания в базе знаний, поддержка в техподдержке
Offline Arseniy  
#7 Оставлено : 29 апреля 2009 г. 17:58:39(UTC)
Arseniy

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

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

Эта проблема так и повисла?

У меня сейчас возникает аналогичная ошибка (Visual Studio 2005, .Net Framework 2.0 SP1, "CryptoPRO CSP" (версия ядра СКЗИ: 3.6.4070 КС1, версия продукта: 3.6.4856), сертификаты прописаны в реестре).

Возникает ошибка: Запрос был прерван: Не удалось создать защищенный канал SSL/TLS.

Код:

            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);

            X509Certificate2Collection scollection = (X509Certificate2Collection)store.Certificates.Find(X509FindType.FindByTimeValid, DateTime.Now, false);

            X509Certificate2Collection ui = X509Certificate2UI.SelectFromCollection(scollection, "Выберите сертификат", "Сертификаты:", X509SelectionFlag.SingleSelection);

            if (ui.Count == 1)
            {
                X509Certificate2 x509 = ui[0];

                ServicePointManager.ServerCertificateValidationCallback += delegate(object senderobj, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors error) { return true; };

                ServicePointManager.Expect100Continue = true;

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://br.so-cdu.ru/Main.aspx");

                request.Proxy = HttpWebRequest.DefaultWebProxy;

                request.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;

                request.PreAuthenticate = true;

                request.AllowAutoRedirect = false;

                request.KeepAlive = false;

                request.ClientCertificates.Add(x509);

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                webBrowser.DocumentStream = response.GetResponseStream();

            }


Ошибка происходит в строке: HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Отредактировано пользователем 29 апреля 2009 г. 18:04:19(UTC)  | Причина: Не указана

Offline Челпанов А.  
#8 Оставлено : 29 апреля 2009 г. 18:26:50(UTC)
Челпанов А.

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

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Какая версия КриптоПро Sharpei стоит?
Напишите полный текст исключения (со стеком).
Есть ли ошибки в log от CPNetDetours?
Нормально ли устанаваливается соединение в IE с этим web site?
С уважением, Александр.
Offline Максим Коллегин  
#9 Оставлено : 29 апреля 2009 г. 18:34:49(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
CSP 3.6 не мешало бы обновить.
Знания в базе знаний, поддержка в техподдержке
Offline AndrewKostousov  
#10 Оставлено : 1 мая 2009 г. 21:56:37(UTC)
AndrewKostousov

Статус: Участник

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

У меня в точности такая же ошибка (System.Net.WebException: Запрос был прерван: не удалось создать защищенный канал SSL/TLS) валится на Висте с КриптоПро 3.6.4804 (версия ядра 3.6.4070 КС1) при попытке установить https-соединение (без использования клиентского сертификата) с веб-службой.

При этом:
- Sharpei не используется совсем (используются только родные дот-нетовские классы для работы с веб-службами);
- в системный журнал валится ошибка с кодом 307 от источника cpsspap: "КриптоПро TLS. Ошибка 0x80090330 протокола TLS: Указанные данные не могут быть расшифрованы";
- при обращении к wsdl-ке веб-службы через IE https-соединение нормально устанавливается;
- после замены Крипто-Про на версию 3.6.5329 ошибка пропадает;
- на Висте с КриптоПро 3.6.5152 (версия ядра 3.6.4071 КС1) ошибка не наблюдалась.

Таким образом, подозрение падает на конкретный билд ядра КриптоПро (3.6.4070)...

Подробности по ошибке:
System.Net.WebException: Запрос был прерван: не удалось создать защищенный канал SSL/TLS.
System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
PkiTools.Enroll.Client.CertificateEnrollmentGatewayProxy.GetRequestForms(String tokenId, RequestFormState formState)
...
Операционная система: Win32NT 6.0.6000.0
Используемая версия .NET Framework: 2.0.50727.3074
С уважением,
Андрей Костоусов
СКБ Контур
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (3)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.