PowerShell Invoke-RestMethod не удалось создать безопасный канал TLS/SSL
Я вызываю Invoke-RestMethod в сценарии PowerShell, чтобы загрузить zip-архив в репозиторий Artifactory. Я протестировал сценарий на своей локальной машине PowerShell ISE; загрузка завершена без проблем, как и ожидалось. Однако когда я выполняю сценарий на предполагаемой целевой машине, я получаю сообщение об ошибке:
Запрос был прерван: не удалось создать безопасный канал SSL/TLS.
Я прочитал множество сообщений в Интернете, связанных с этой ошибкой; консенсус состоит в том, чтобы добавить следующую строку непосредственно перед вызовом Invoke-RestMethod в скрипте:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Ssl3
Я добавил эту строку, но проблема не устранена.
Выполнение следующего PowerShell:
[Net.ServicePointManager]::SecurityProtocol
возвращает:
Ssl3, Tls, Tls11, Tls12, предполагая, что все доступные протоколы включены.
Теперь мой фрагмент скрипта выглядит так:
$headers = @{"X-JFrog-Art-Api" = $artifactoryApiKey}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Ssl3
$return=Invoke-RestMethod -Uri $uri -InFile $sourceFile -Method Put -Headers $headers
Как указано выше, этот сценарий выполняется без проблем на моем локальном компьютере.
.Net 4.6.1 установлен на сервере, возвращающем ошибку.
1 ответ
Я не предлагаю объяснение, но, возможно, решение для некоторых. У меня была точно такая же проблема: PowerShell invoke-RestMethod работал локально, но не при запуске с предполагаемого (Windows 2012 R2) сервера. Я получаю ту же ошибку TLS/SSL. Я много читал о рукопожатии TLS и других технических примечаниях и тестировал такие предложения, как:
- Установка протокола безопасности, как указано в исходном вопросе
- Включение протокола TLS в реестре
- Список и сравнение наборов шифров.
В конце концов, я не смог заставить PowerShell работать. ОДНАКО, остальные вызовы работают с сервера, используя curl.exe в командной строке. Если вы видите это, я рекомендую прекратить попытки устранения неполадок PowerShell и попробовать curl . Я нашел это и это полезным при написании моих первых вызовов покоя curl.exe.