| 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 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()
 
 Прошу помочь разобраться в проблеме.
 
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 28.05.2008(UTC)
 Сообщений: 11
 Откуда: Москва
 
 | 
            
		      
                А без прокси сервера пробовали??? | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 27.06.2008(UTC)
 Сообщений: 2
 
 | 
            
		      
                Без прокси тоже пробовали. Результат тот же. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Попробуйте поставить SP1 на .Net Framework.Если ошибка не пропадет напишите есть ли сообщения в Application log от CPNetDetours?
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
Зарегистрирован: 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();
 }
 
 =====================
 
 всю логику нужно уложить после имперционации!
 
 Вот так вроде!
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы
 Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,417  Откуда: КРИПТО-ПРОСказал «Спасибо»: 37 разПоблагодарили: 729 раз в 630 постах
 
 | 
            
		      
                alexlexa написал:Необходимо имперционацию делать на ASP .net !!!
 Это к чему? ASP .Net и сам умеет прекрасно имперсонироваться, если попросить. | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Новичок
 Группы: Участники
Зарегистрирован: 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)
 | Причина: Не указана | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Активный участник
 Группы: Участники
 Зарегистрирован: 24.12.2007(UTC) Сообщений: 390  Откуда: КриптоПроПоблагодарили: 2 раз в 2 постах
 | 
            
		      
                Какая версия КриптоПро Sharpei стоит?Напишите полный текст исключения (со стеком).
 Есть ли ошибки в log от CPNetDetours?
 Нормально ли устанаваливается соединение в IE с этим web site?
 
 | 
| С уважением, Александр. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы: Администраторы
 Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,417  Откуда: КРИПТО-ПРОСказал «Спасибо»: 37 разПоблагодарили: 729 раз в 630 постах
 
 | 
            
		      
                CSP 3.6 не мешало бы обновить. | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 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
 | 
| С уважением,Андрей Костоусов
 СКБ Контур
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close