PowerShell - это приложение .NET
..NET
приложения имеют AppDomain (только одно; именно поэтому вам необходимо перезапустить powershell.exe
, чтобы очистить сеанс).Как часть этого, у вас есть System.Net.ServicePointManager
класс для управления HTTP-соединениями (я настоятельно рекомендую прочитать эту статью для более полного понимания).
Причина вашего первого битакода с объектом TrustAllCertsPolicy
происходит из-за ненадежной природы самозаверяющих сертификатов, что говорит мне либо
- Ваша служба использует самоподписанный сертификат
- Ваша служба имееткакой-то специфический для компании сертификат, который ваша рабочая станция не импортировала
Так что все, что он делает, это позволяет Invoke-WebRequest
принимать любой сертификат (что опасно, если вы не знаете, к чему подключаетесь).
Причина вашего второго бита с SecurityProtocol
заключается в том, что Win7 / W2K8 не поддерживает TLS1.2 по умолчанию.Обычно это выполняется с помощью ключей реестра SCHANNEL ( дополнительное чтение ), но по умолчанию они не существуют на этих платформах (возможно, я неправильно запомнил этот фрагмент), так чтоAppDomain по умолчанию использует SSL3.0 / TLS1.0.Я бы порекомендовал использовать -bor
при установке SecurityProtocol
, чтобы не нарушать обратную или прямую совместимость:
[System.Net.ServicePointManager]::SecurityProtocol =
[System.Net.ServicePointManager]::SecurityProtocol -bor [System.Net.SecurityProtocolType]::Tls12