Получение Невозможно найти тип [System.Net.ServicePointManager]. в PowerShell для OS X

Я пытаюсь отладить скрипт, выполняющий вызов https с помощью Invoke-WebRequest. Поскольку он не разрешает запрос из-за ошибок сертификата, мне нужно выполнить следующую команду, чтобы отключить проверку SSL:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}

Однако, когда я пытаюсь запустить эту команду, я получаю следующую ошибку:

Unable to find type [System.Net.ServicePointManager].
At line:1 char:1
+ [System.Net.ServicePointManager]::ServerCertificateValidationCallback ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (System.Net.ServicePointManager:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound

ОС: macOS Сьерра

Чтобы воспроизвести проблему:

  • Загрузите PowerShell для OS X с https://github.com/PowerShell/PowerShell.

  • Установите .pkg

  • Введите «powershell» в терминале

  • Попробуйте запустить команду выше.


person Bilbo Baggins    schedule 05.05.2017    source источник


Ответы (2)


Не совсем знаком с этим, но... ссылка PowerShell для OS X, которую вы предоставляете, похоже, использует .NET Core. Однако System.Net.ServicePointManager не поддерживается .NET Core.

Покопавшись, я смог найти этот вопрос StackOverflow, который привести к этой проблеме, а затем эта проблема, но, честно говоря, я немного не понимаю, что происходит, потому что номера версий относятся к очень разным вещам. Я не могу сказать, что актуально, а что нет.

Суть в том, что, насколько я могу судить, правильный метод для .Net Core должен быть Http​Client​Handler.​Server​Certificate​Custom​Validation​Callback в System.Net.Http, но я не совсем уверен, как вы относитесь к этому с PowerShell.

person Bacon Bits    schedule 05.05.2017

В Windows PowerShell вплоть до версии 5 обходной путь, который вы пытаетесь использовать, требовался, поскольку командлет Invoke-WebRequest не имел удобного способа игнорировать проверки сертификатов.

В PowerShell 6+ из-за преобладания самозаверяющих сертификатов в мире открытого исходного кода Invoke-WebRequest был обновлен, чтобы включить множество новых параметров переключения для работы с ними. В частности, взгляните на параметр -SkipCertificateCheck в документация по командлету.

Этот параметр позволит вам принять неизвестный сертификат для шифрования вашего соединения, как вы пытаетесь сделать здесь.

person Bill Hurt    schedule 19.04.2019
comment
Не знаю, почему у вас мало голосов, сэр. Вы избавили меня от огромной головной боли и множества гуглов! Спасибо. -SkipCertificateCheck сделал это за меня - person Tarik.J; 11.12.2019