Скрипт Powershell для загрузки файла, возникли проблемы с настройкой безопасного соединения
-
02-07-2019 - |
Вопрос
Я создаю автоматический скрипт для чтения списка с сайта, на котором публикуется последний скомпилированный код.Эту часть я уже понял.Следующая часть сценария — получить этот скомпилированный код с сервера с ненадежным сертификатом.
Вот как я собираюсь получить файл:
$web = new-object System.Net.WebClient
$web.DownloadFile("https://uri/file.msi", "installer.msi")
Затем я получаю следующую ошибку:
Исключение при вызове «DownloadFile» с аргументами «2»:"Основное соединение было закрыто:Не смог установить доверительные отношения для безопасного канала SSL/TLS ».
Я знаю, что что-то упускаю, но не могу найти правильный способ поиска.
Решение
Вам нужно написать обработчик обратного вызова для ServicePointManager.ServerCertificateValidationCallback.
Другие советы
Брэд прав, но обратите внимание, что PowerShell V1 на самом деле не имеет встроенной поддержки делегатов, которая вам понадобится в этом конкретном случае.Я считаю, что это должно тебя обойти это ограничение (на самом деле описанный вами сценарий является именно одним из использованных примеров).
Если вы используете powershell и столкнулись с этой ошибкой.Используйте команду:
[Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12
перед загрузкой пакета.Это заставляет PS использовать TLS 1.2.
Причиной сбоя может быть то, что веб-сайт, с которого вы пытаетесь загрузить, отключил поддержку TLS 1.0, которую PS использует по умолчанию.