Подтвердить что ты не робот

Ошибка Powershell Invoke-WebRequest с защищенным каналом SSL/TLS

Я пытаюсь выполнить эту команду powershell

Invoke-WebRequest -Uri https://apod.nasa.gov/apod/

и я получаю эту ошибку. "Invoke-WebRequest: запрос был прерван: не удалось создать безопасный канал SSL/TLS". https запросы работают (" https://google.com "), но не этот вопрос. Как я могу заставить это работать или использовать другую команду powershell для чтения содержимого страницы?

4b9b3361

Ответ 1

попробуйте использовать этот

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/

Ответ 2

В бесстыдной попытке украсть несколько голосов SecurityProtocol представляет собой Enum с атрибутом [Flags]. Так что вы можете сделать это:

[Net.ServicePointManager]::SecurityProtocol = 
  [Net.SecurityProtocolType]::Tls12 -bor '
  [Net.SecurityProtocolType]::Tls11 -bor '
  [Net.SecurityProtocolType]::Tls

Или, поскольку это PowerShell, вы можете разрешить ему разобрать строку:

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

Тогда вам технически не нужно знать версию TLS.

Я скопировал и вставил это из сценария, который создал после прочтения этого ответа, потому что не хотел перебирать все доступные протоколы, чтобы найти тот, который работал. Конечно, вы можете сделать это, если хотите.

Последнее замечание: в моем профиле PowerShell есть исходная (за вычетом правок) заявка, поэтому я запускаю ее в каждом сеансе. Это не совсем надежно, так как есть некоторые сайты, которые просто выходят из строя, но я наверняка вижу это сообщение гораздо реже.

Ответ 3

Этот работал для меня

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"

Ответ 4

Меня устраивает...

if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
    {
    $certCallback = @"
        using System;
        using System.Net;
        using System.Net.Security;
        using System.Security.Cryptography.X509Certificates;
        public class ServerCertificateValidationCallback
        {
            public static void Ignore()
            {
                if(ServicePointManager.ServerCertificateValidationCallback ==null)
                {
                    ServicePointManager.ServerCertificateValidationCallback += 
                        delegate
                        (
                            Object obj, 
                            X509Certificate certificate, 
                            X509Chain chain, 
                            SslPolicyErrors errors
                        )
                        {
                            return true;
                        };
                }
            }
        }
    "@
        Add-Type $certCallback
     }
    [ServerCertificateValidationCallback]::Ignore()

Invoke-WebRequest -Uri https://apod.nasa.gov/apod/

Ответ 5

Я не выяснил причину, но переустановка сертификата .pfx (как для текущего пользователя, так и для локального компьютера) работает для меня.