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 и других технических примечаниях и тестировал такие предложения, как:

  1. Установка протокола безопасности, как указано в исходном вопросе
  2. Включение протокола TLS в реестре
  3. Список и сравнение наборов шифров.

В конце концов, я не смог заставить PowerShell работать. ОДНАКО, остальные вызовы работают с сервера, используя curl.exe в командной строке. Если вы видите это, я рекомендую прекратить попытки устранения неполадок PowerShell и попробовать curl . Я нашел это и это полезным при написании моих первых вызовов покоя curl.exe.

Другие вопросы по тегам