2016-10-29 12 views
0

I ve faced with very strange issue that i m борется с ним в течение 2 дней. Я попытался запустить код ниже на нескольких dev машинах, и он работает успешно. Но когда я пытаюсь запустить его на рабочем сервере с Windows Server 2008 R2 - это потерпело неудачу с сообщением:Не удалось создать защищенный канал SSL/TLS на сервере Windows 2008 R2

Не удалось создать SSL/TLS защищенный канал

Вот пример кода:

try 
     { 
      Console.WriteLine(ServicePointManager.SecurityProtocol); 
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | 
                SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; 
      ServicePointManager.Expect100Continue = true; 
      ServicePointManager.ServerCertificateValidationCallback += 
       (sender, certificate, chain, sslPolicyErrors) => true; // ignoring certificate errors 
      Console.WriteLine(ServicePointManager.SecurityProtocol); 
      using (var client = new WebClient()) 
      { 
       client.DownloadString("https://smlegacygateway-integration.mysmartmove.com/LandlordApi/v1/ServerTime"); 
      } 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Something goes wrong"); 
      Console.Write(ex); 
     } 

     Console.WriteLine("Everything is fine."); 
     Console.ReadLine(); 

Не могли бы вы помочь мне с любыми идеями, почему только на Windows Server 2008 R2 это не удалось? Я попытался запустить его на Windows Server 2012 - все в порядке.

P.S. Я запускаю это консольное приложение с разрешением администратора, поэтому он не должен иметь отношения к разрыву прав. Спасибо заранее.

ответ

0

Честно говоря, я не знаю почему. Я предполагаю, что это может быть связано с тем, что Windows 2012 поддерживает новые криптоалгоритмы, которых нет в Windows 2008.

В соответствии с сервером this ssl test сервер поддерживает только TSL 1.2 и TSL 1.1 и выбирает только несколько наборов шифров. Все проведенные проверки рукопожатия были выполнены с использованием TSL 1.2, поэтому я пошел бы с этим протоколом в ServicePointManager.SecurityProtocol.

Причина отказа подключения в Windows 2008 может быть найдена в журнале событий CAPI2. Сначала вы должны включить его, а затем попытаться снова подключиться к серверу (smlegacygateway-integration.mysmartmove.com). CAPI2 event log

О, окончательный совет. Пожалуйста, не делайте этого:

ServicePointManager.ServerCertificateValidationCallback += 
       (sender, certificate, chain, sslPolicyErrors) => true; // ignoring certificate errors 

Если вам необходимо выполнить проверку сертификатов, тогда выполните его. Возвращение всегда верно - не лучший выбор. Если вам не нужно переопределять его, не прикасайтесь к нему :)