Базовое соединение было закрыто: при отправке произошла непредвиденная ошибка - только на Windows сервер 2016 - PullRequest
0 голосов
/ 08 января 2020

Имеет следующий код.

      using (var client = new WebClient())
                {
                  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

                    ServicePointManager.Expect100Continue = true;
                    ServicePointManager.DefaultConnectionLimit = 9999;

                    byte[] data = client.DownloadData(resource.MainPictureUrl);

                    if (media.BinaryData == null)
                    {
                        Uri uri = new Uri(resource.MainPictureUrl);

                        media.BinaryData = BlobFactory.Service.CreateBlob(media.BinaryDataContainer, $".{extension}");
                    }
                    media.BinaryData.WriteAllBytes(data);
                }

Он загружает образ, это хорошо работает в локальной среде, но при развертывании на сервере. Windows Server 2016 и IIS Я получаю следующее сообщение об ошибке.

Сканировал inte rnet, и все говорят об этой строке: ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls

Однако, похоже, это не так help.

Несколько советов, почему он указывает c на сервер.

Запуск ASP. NET версия:. NET CLR Версия v4.0.30319

РЕДАКТИРОВАТЬ

Указывает URL-адрес изображения в IE. Получает сообщение об ошибке: Эта страница должна отображаться

Включите TLS 1.0, TLS 1.1 и TLS 1.2 в расширенных настройках и попробуйте снова подключиться к https: // site-uri. Если эта ошибка повторяется, возможно, на этом сайте используется неподдерживаемый протокол или набор шифров, например RC4 (ссылка на подробности), который не считается безопасным

Любая настройка на сервере, которая блокирует это?

Но если я проверяю страницу со своего компьютера с Win 10, я вижу это:

Эта страница защищена (действительный HTTPS). Сертификат - действительный и доверенный Соединение с этим сайтом использует действительный, доверенный сертификат сервера, выданный DigiCert SHA2 Secure Server CA. Просмотр сертификата Соединение - настройки безопасного соединения Соединение с этим сайтом шифруется и аутентифицируется с использованием TLS 1.2, ECDHE_RSA с P-256 и AES_256_GCM. Ресурсы - все обслуживаются надежно Все ресурсы на этой странице обслуживаются безопасно.

РЕДАКТИРОВАТЬ 2 - Проблема решена

Проблема решена,

Ошибка то, что сервер был заблокирован через прокси-сервер, которому не разрешалось совершать звонки в Inte rnet, это было решено путем внесения в белый список образов домена, загруженных из.

, так что и код, и версии ASP. NET были правильны все время. Спасибо за помощь.

1 Ответ

0 голосов
/ 08 января 2020

Ну, это происходит потому, что вы используете. Net 4.0. В. NET 4.0 стандартом безопасности транспортного уровня по умолчанию является TLS 1.1. Решением вашей проблемы является обновление приложения до последней версии. NET framework. Например, в 4.6.1 TLS 1.2 является криптографическим стандартом c по умолчанию.

Он работает на вашем локальном компьютере, поскольку в вашей системе может быть установлен *. 1039 * 4.5. Вы можете попробовать сделать это:

SecurityProtocolType.Tls11 | SecurityProtocolType.Tls

вместо

SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls

, и это будет работать.

Вот общее руководство:

  1. . NET 4.6 : и выше: TLS 1.2 поддерживается по умолчанию.
  2. . NET 4.5 : TLS 1.2 поддерживается, но это не так протокол по умолчанию.
  3. . NET 4,0 . TLS 1.2 не поддерживается, но если в системе установлено. NET 4.5 (или выше), вы все равно можете выбрать TLS 1.2, даже если ваша прикладная среда не поддерживает его.
  4. . NET 3,5 или ниже . TLS 1.2 не поддерживается (*) и обходного пути нет. Обновите ваше приложение до более новой версии фреймворка.

Ссылка: https://blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support/

...