none
не удалось создать защищенный канал ssl tls RRS feed

  • Общие обсуждения

  • Создали сертификат на одной машине. Установил на другую в Личные. Приложением пытаемся подрубиться к скачке XML файла - возникает ошибка: не удалось создать защищенный канал ssl tls.
    Требуется помощь для решения проблемы.

    class MyCerts
      {
    
        private static int CERT_STORE_PROV_SYSTEM = 10;
        private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16);
        //private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16);
    
        [DllImport("CRYPT32", EntryPoint = "CertOpenStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CertOpenStore(
          int storeProvider, int encodingType,
          int hcryptProv, int flags, string pvPara);
    
        [DllImport("CRYPT32", EntryPoint = "CertEnumCertificatesInStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CertEnumCertificatesInStore(
          IntPtr storeProvider,
          IntPtr prevCertContext);
    
        [DllImport("CRYPT32", EntryPoint = "CertCloseStore", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern bool CertCloseStore(
          IntPtr storeProvider,
          int flags);
    
        X509Certificate2Collection m_certs;
    
        public MyCerts()
        {
          m_certs = new X509Certificate2Collection();
        }
    
        public int Init()
        {
          IntPtr storeHandle;
          storeHandle = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, 0, CERT_SYSTEM_STORE_CURRENT_USER, "MY");
          IntPtr currentCertContext;
          currentCertContext = CertEnumCertificatesInStore(storeHandle, (IntPtr)0);
          int i = 0;
          while (currentCertContext != (IntPtr)0)
          {
            m_certs.Insert(i++, new X509Certificate2(currentCertContext));
            currentCertContext = CertEnumCertificatesInStore(storeHandle, currentCertContext);
          }
          CertCloseStore(storeHandle, 0);
    
          return m_certs.Count;
        }
    
        public X509Certificate2 this[int index]
        {
          get
          {
            if (index < 0 || index > m_certs.Count)
              return null;
            else
              return m_certs[index];
          }
        }
      }  
      class MyHttpResource
      {
        String m_url;
    
        public MyHttpResource(string url)
        {
          m_url = url;
        }
    
        public void GetFile()
        {
    
          HttpWebResponse result = null;
          //==============================================================
          System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();
          //==============================================================
          try
          {        
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(m_url);
            req.Credentials = CredentialCache.DefaultCredentials;
            //req.ClientCertificates.Add(X509Certificate2.CreateFromCertFile("C:\\Temp\\cert\\c1.cer"));
            MyCerts mycert = new MyCerts();
            if (mycert.Init() > 0)
              req.ClientCertificates.Add(mycert[0]);
            Console.WriteLine(mycert[0].Thumbprint);
            Console.WriteLine(mycert[1].Thumbprint);
            
            result = (HttpWebResponse)req.GetResponse();
    
            StreamWriter writer = new StreamWriter(@"C:/123.txt");
            Stream ReceiveStream = result.GetResponseStream();
    
            #region For XML files       
            Encoding encode = System.Text.Encoding.Default;
            #endregion
    
            #region For sites        
            //Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
            #endregion
    
            StreamReader sr = new StreamReader(ReceiveStream, encode);
            Console.WriteLine("\r\nResponse stream received");
            Char[] read = new Char[256];
            int count = sr.Read(read, 0, 256);
    
            Console.WriteLine("HTTP Response...\r\n");
            while (count > 0)
            {
              String str = new String(read, 0, count);
              Console.Write(str);
              writer.WriteLine(str);
              count = sr.Read(read, 0, 256);
            }
            writer.Close();
          }
          catch (WebException e)
          {
            Console.WriteLine(e.Message); 				
          }
          finally
          {
            if (result != null)
            {
              result.Close();
            }
          }
    
        }
    
      }
      //==============================================================
      public class MyPolicy : ICertificatePolicy
      {
        public bool CheckValidationResult(
          ServicePoint srvPoint
          , X509Certificate certificate
          , WebRequest request
          , int certificateProblem)
        {
          return true;
        }
      }
      //==============================================================
      class CertSample
      {
        static void Main(string[] args)
        {
          //Console.WriteLine("Куды подрубимся?");
          //string str = Console.ReadLine();
          //if (!str.StartsWith("http://"))
          //  if(!str.StartsWith("https://"))
          //    str = "http://" + str;
          string str = @"https://192.168.191.248/xml/80020.xml";
          Console.WriteLine("Подключаемся к "+str);
          try
          {
            MyHttpResource hr = new MyHttpResource(str);//"http://br.so-ups.ru/Public/Docs/DocList.aspx"
            hr.GetFile();
          }
          catch (Exception e)
          {
            Console.WriteLine(e.Message);
          }
          return;
        }
      }


    25 августа 2011 г. 6:20

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
    1 сентября 2011 г. 6:50
    Модератор